61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
from collections import deque
|
|
|
|
import numpy as np
|
|
import cv2
|
|
|
|
class ImageManager():
|
|
|
|
def __init__(self, update_fn):
|
|
super().__init__()
|
|
self.update_fn = update_fn
|
|
self.close()
|
|
|
|
def undo(self):
|
|
if len(self._undo_deque) == 0:
|
|
return
|
|
prev = self._undo_deque.pop()
|
|
self._redo_deque.append(self._curr_image)
|
|
self._curr_image = prev
|
|
self.update_fn(self._curr_image)
|
|
|
|
def redo(self):
|
|
if len(self._redo_deque) == 0:
|
|
return
|
|
latter = self._redo_deque.pop()
|
|
self._undo_deque.append(self._curr_image)
|
|
self._curr_image = latter
|
|
self.update_fn(self._curr_image)
|
|
|
|
def update(self, new_image):
|
|
self._undo_deque.append(self._curr_image)
|
|
self._redo_deque = deque()
|
|
self._curr_image = new_image.copy()
|
|
self.update_fn(self._curr_image)
|
|
|
|
def open(self, file_name):
|
|
self.close()
|
|
self._curr_image = cv2.imread(file_name)
|
|
self._curr_image = cv2.cvtColor(self._curr_image, cv2.COLOR_BGR2RGB)
|
|
self.update_fn(self._curr_image)
|
|
|
|
|
|
def close(self):
|
|
self._undo_deque = deque()
|
|
self._redo_deque = deque()
|
|
self._curr_image = None
|
|
|
|
def save(self, file_name):
|
|
if self._curr_image is not None:
|
|
cv2.imwrite(file_name, cv2.cvtColor(self._curr_image, cv2.COLOR_RGB2BGR))
|
|
|
|
def refresh(self):
|
|
self.update_fn(self._curr_image)
|
|
|
|
def image(self):
|
|
return self._curr_image
|
|
|
|
def can_redo(self):
|
|
return len(self._redo_deque) > 0
|
|
|
|
def can_undo(self):
|
|
return len(self._undo_deque) > 0 |