Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions RawRefinery/application/ModelHandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ def __init__(self):
self.model = None
self.rh = None
self.iso = 100
self.orientation = 0.
self.mirrored = False
self.colorspace = 'lin_rec2020'

# Manage devices
Expand Down Expand Up @@ -208,6 +210,36 @@ def load_rh(self, path):
self.iso = int(self.rh.full_metadata['EXIF ISOSpeedRatings'].values[0])
else:
self.iso = 100
if 'Image Orientation' in self.rh.full_metadata:
orientation_value = int(self.rh.full_metadata['Image Orientation'].values[0])
match orientation_value :
case 1:
self.mirrored=False
self.orientation=0.
case 2:
self.mirrored=True
self.orientation=0.
case 3:
self.mirrored=False
self.orientation = 180.
case 4:
self.mirrored=True
self.orientation = 180.
case 5:
self.mirrored=True
self.orientation= 90.
case 6:
self.mirrored=False
self.orientation= 90.
case 7:
self.mirrored=True
self.orientation = 270.
case 8:
self.mirrored=False
self.orientation = 270.
else:
self.orientation = 0.
self.mirrored = False
return self.iso

def load_model(self, model_key):
Expand Down
37 changes: 33 additions & 4 deletions RawRefinery/application/RawRefineryApp.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
QFileDialog, QListWidget, QLabel, QSlider, QSpinBox,
QHBoxLayout, QFormLayout, QComboBox, QProgressBar, QMessageBox
)
from PySide6.QtGui import QPixmap, QIcon
from PySide6.QtGui import QPixmap, QIcon, QTransform
from PySide6.QtCore import Qt, Slot

# Import utils
Expand Down Expand Up @@ -192,7 +192,14 @@ def on_file_selected(self, item):
# Show thumbnail
thumb_rgb = self.controller.generate_thumbnail()
qimg = numpy_to_qimage_rgb(thumb_rgb, exposure=self.exposure_slider.get_natural_value())
self.thumb_label.set_image(qimg)

# Show image accordingly to EXIF orientation
transform = QTransform().rotate(self.controller.orientation)
if self.controller.mirrored:
transform = QTransform().scale(-1,1).rotate(self.controller.orientation)
rot = qimg.transformed(transform)

self.thumb_label.set_image(rot)

self.dims = None
self.preview_label.setText("Click thumbnail to preview region")
Expand All @@ -205,6 +212,21 @@ def on_thumbnail_click(self, x_ratio, y_ratio):
rh = self.controller.rh
H_full, W_full = rh.raw.shape


# Retrieve the original coordinate from non-rotated media
match self.controller.orientation:
case 0:
pass
case 90:
x_ratio, y_ratio = y_ratio, x_ratio
case 180:
x_ratio, y_ratio = 1.0 - x_ratio, 1.0 - y_ratio
case 270:
x_ratio, y_ratio = 1.0- y_ratio, x_ratio

if self.controller.mirrored:
x_ratio = 1.0 - x_ratio

# Center of click in raw coords
c_x = int(x_ratio * W_full)
c_y = int(y_ratio * H_full)
Expand Down Expand Up @@ -288,7 +310,14 @@ def display_result(self, img_rgb, denoised):

# Convert output to QImage
qimg = numpy_to_qimage_rgb(denoised, exposure=self.exposure_slider.get_natural_value())
pix = QPixmap.fromImage(qimg)

# Show image accordingly to EXIF orientation
transform = QTransform().rotate(self.controller.orientation)
if self.controller.mirrored:
transform = QTransform().scale(-1,1).rotate(self.controller.orientation)
rot = qimg.transformed(transform)

pix = QPixmap.fromImage(rot)

# Scale for display
scaled = pix.scaled(self.preview_label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
Expand Down Expand Up @@ -322,4 +351,4 @@ def display_device(self, device):
window = RawRefineryApp()
window.show()
window.loading_popup()
sys.exit(app.exec())
sys.exit(app.exec())