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:
2025-10-14 08:41:47 +02:00
parent d62b367b47
commit 03ab345e17

View File

@@ -188,6 +188,7 @@ class ViewWithOverlay(QWidget):
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,
@@ -208,6 +209,7 @@ class ViewWithOverlay(QWidget):
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)
@@ -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)