refactor(SplitView): Improve image rotation logic
Refactor the image rotation mechanism in the `SplitView` widget to prevent image quality degradation. - The original reference pixmap is now stored in `self.original_ref_pixmap`. - Rotations are always applied to the original, unmodified pixmap, using a cumulative rotation angle. - This avoids sequential transformations that caused gradual quality loss. - Also fixes indentation issues caused by previous automated replacements.
This commit is contained in:
@@ -179,15 +179,16 @@ class ViewWithOverlay(QWidget):
|
|||||||
return btn
|
return btn
|
||||||
|
|
||||||
def _create_top_right_buttons(self):
|
def _create_top_right_buttons(self):
|
||||||
self.cw_btn = self._create_tool_button(
|
self.cw_btn = self._create_tool_button(
|
||||||
icon_path=str(ICONS_DIR / "rotate-cw-svgrepo-com.svg"),
|
icon_path=str(ICONS_DIR / "rotate-cw-svgrepo-com.svg"),
|
||||||
callback=self.rotateCW,
|
callback=self.rotateCW,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.ccw_btn = self._create_tool_button(
|
self.ccw_btn = self._create_tool_button(
|
||||||
icon_path=str(ICONS_DIR / "rotate-ccw-svgrepo-com.svg"),
|
icon_path=str(ICONS_DIR / "rotate-ccw-svgrepo-com.svg"),
|
||||||
callback=self.rotateCCW,
|
callback=self.rotateCCW,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.flip_btn = self._create_tool_button(
|
self.flip_btn = self._create_tool_button(
|
||||||
icon_path=None,
|
icon_path=None,
|
||||||
callback=self.swapViews,
|
callback=self.swapViews,
|
||||||
@@ -198,16 +199,17 @@ class ViewWithOverlay(QWidget):
|
|||||||
callback=self.toggleOrientation,
|
callback=self.toggleOrientation,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _create_top_left_buttons(self):
|
def _create_top_left_buttons(self):
|
||||||
self.camera_btn = self._create_tool_button(
|
self.camera_btn = self._create_tool_button(
|
||||||
icon_path=str(ICONS_DIR / "settings-svgrepo-com.svg"),
|
icon_path=str(ICONS_DIR / "settings-svgrepo-com.svg"),
|
||||||
callback=self.cameraConnection
|
callback=self.cameraConnection
|
||||||
)
|
)
|
||||||
|
|
||||||
self.settings_btn = self._create_tool_button(
|
self.settings_btn = self._create_tool_button(
|
||||||
icon_path=str(ICONS_DIR / "error-16-svgrepo-com.svg"),
|
icon_path=str(ICONS_DIR / "error-16-svgrepo-com.svg"),
|
||||||
callback=self.cameraSettings
|
callback=self.cameraSettings
|
||||||
)
|
)
|
||||||
|
|
||||||
def set_image(self, pixmap: QPixmap):
|
def set_image(self, pixmap: QPixmap):
|
||||||
self.viewer.set_image(pixmap)
|
self.viewer.set_image(pixmap)
|
||||||
|
|
||||||
@@ -229,13 +231,13 @@ class ViewWithOverlay(QWidget):
|
|||||||
right_corner += self.orient_btn.width() + 10
|
right_corner += self.orient_btn.width() + 10
|
||||||
self.orient_btn.move(self.width() - right_corner, 10)
|
self.orient_btn.move(self.width() - right_corner, 10)
|
||||||
|
|
||||||
def toggle_orientation(self, orientation):
|
def toggle_orientation(self, orientation):
|
||||||
if orientation == Qt.Orientation.Vertical:
|
if orientation == Qt.Orientation.Vertical:
|
||||||
self.flip_btn.setIcon(QIcon(str(ICONS_DIR / "flip-vertical-svgrepo-com.svg")))
|
self.flip_btn.setIcon(QIcon(str(ICONS_DIR / "flip-vertical-svgrepo-com.svg")))
|
||||||
self.orient_btn.setIcon(QIcon(str(ICONS_DIR / "horizontal-stacks-svgrepo-com.svg")))
|
self.orient_btn.setIcon(QIcon(str(ICONS_DIR / "horizontal-stacks-svgrepo-com.svg")))
|
||||||
else:
|
else:
|
||||||
self.flip_btn.setIcon(QIcon(str(ICONS_DIR / "flip-horizontal-svgrepo-com.svg")))
|
self.flip_btn.setIcon(QIcon(str(ICONS_DIR / "flip-horizontal-svgrepo-com.svg")))
|
||||||
self.orient_btn.setIcon(QIcon(str(ICONS_DIR / "vertical-stacks-svgrepo-com.svg")))
|
self.orient_btn.setIcon(QIcon(str(ICONS_DIR / "vertical-stacks-svgrepo-com.svg")))
|
||||||
def enterEvent(self, event: QEnterEvent) -> None:
|
def enterEvent(self, event: QEnterEvent) -> None:
|
||||||
if self.live:
|
if self.live:
|
||||||
self.camera_btn.show()
|
self.camera_btn.show()
|
||||||
@@ -284,7 +286,7 @@ class SplitView(QSplitter):
|
|||||||
# self.widget_live.set_image(pixmap)
|
# self.widget_live.set_image(pixmap)
|
||||||
|
|
||||||
self.ref_image_rotate = 0
|
self.ref_image_rotate = 0
|
||||||
self.ref_pixmap = None
|
self.original_ref_pixmap = None
|
||||||
|
|
||||||
self.widget_live.toggleOrientation.connect(self.toggle_orientation)
|
self.widget_live.toggleOrientation.connect(self.toggle_orientation)
|
||||||
self.widget_ref.toggleOrientation.connect(self.toggle_orientation)
|
self.widget_ref.toggleOrientation.connect(self.toggle_orientation)
|
||||||
@@ -322,10 +324,9 @@ class SplitView(QSplitter):
|
|||||||
|
|
||||||
def set_reference_image(self, path_image: str):
|
def set_reference_image(self, path_image: str):
|
||||||
"""Ustawienie obrazu referencyjnego"""
|
"""Ustawienie obrazu referencyjnego"""
|
||||||
self.ref_pixmap = QPixmap(path_image)
|
self.original_ref_pixmap = QPixmap(path_image)
|
||||||
if self.ref_image_rotate != 0:
|
self.ref_image_rotate = 0
|
||||||
self.ref_pixmap = self.ref_pixmap.transformed(QTransform().rotate(self.ref_image_rotate))
|
self.widget_ref.set_image(self.original_ref_pixmap)
|
||||||
self.widget_ref.set_image(self.ref_pixmap)
|
|
||||||
|
|
||||||
def toggle_live_view(self):
|
def toggle_live_view(self):
|
||||||
"""Przełączanie widoku na żywo"""
|
"""Przełączanie widoku na żywo"""
|
||||||
@@ -335,15 +336,17 @@ class SplitView(QSplitter):
|
|||||||
self.stack.setCurrentWidget(self.widget_start)
|
self.stack.setCurrentWidget(self.widget_start)
|
||||||
|
|
||||||
def rotate_left(self):
|
def rotate_left(self):
|
||||||
if not self.ref_pixmap:
|
if not self.original_ref_pixmap:
|
||||||
return
|
return
|
||||||
self.ref_image_rotate = (self.ref_image_rotate - 90) % 360
|
self.ref_image_rotate = (self.ref_image_rotate - 90) % 360
|
||||||
self.ref_pixmap = self.ref_pixmap.transformed(QTransform().rotate(-90))
|
transform = QTransform().rotate(self.ref_image_rotate)
|
||||||
self.widget_ref.set_image(self.ref_pixmap)
|
rotated_pixmap = self.original_ref_pixmap.transformed(transform)
|
||||||
|
self.widget_ref.set_image(rotated_pixmap)
|
||||||
|
|
||||||
def rotate_right(self):
|
def rotate_right(self):
|
||||||
if not self.ref_pixmap:
|
if not self.original_ref_pixmap:
|
||||||
return
|
return
|
||||||
self.ref_image_rotate = (self.ref_image_rotate + 90) % 360
|
self.ref_image_rotate = (self.ref_image_rotate + 90) % 360
|
||||||
self.ref_pixmap = self.ref_pixmap.transformed(QTransform().rotate(90))
|
transform = QTransform().rotate(self.ref_image_rotate)
|
||||||
self.widget_ref.set_image(self.ref_pixmap)
|
rotated_pixmap = self.original_ref_pixmap.transformed(transform)
|
||||||
|
self.widget_ref.set_image(rotated_pixmap)
|
||||||
Reference in New Issue
Block a user