studia/jezyki-skryptowe/image-editor/HueDialog.py

68 lines
2.5 KiB
Python

import abc
from ImageProcessingWorker import ImageProcessingWorker
import numpy as np
from PyQt6.QtWidgets import QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QWidget, QFileDialog, QSlider, QLineEdit, QDialog
from PyQt6.QtGui import QPixmap, QImage, QColor, QPainter, QPen
from PyQt6.QtCore import Qt, QPoint, QThread
from ImageParameterDialog import ImageParameterDialog
class HueDialog(ImageParameterDialog):
def __init__(self, hsv_image):
super().__init__(hsv_image)
self.setWindowTitle("Hue Correction Dialog")
self.layout = QVBoxLayout()
self.hue_slider = QSlider(Qt.Orientation.Horizontal)
self.hue_slider.setRange(-180, 180)
self.chroma_slider = QSlider(Qt.Orientation.Horizontal)
self.chroma_slider.setRange(-100, 100)
self.lightness_slider = QSlider(Qt.Orientation.Horizontal)
self.lightness_slider.setRange(-100, 100)
self.label1 = QLabel("Hue Value: 0")
self.label2 = QLabel("Chroma Value: 0")
self.label3 = QLabel("Lightness Value: 0")
self.hue_slider.valueChanged.connect(lambda value: self.update(self.label1, value, "Hue"))
self.chroma_slider.valueChanged.connect(lambda value: self.update(self.label2, value, "Chroma"))
self.lightness_slider.valueChanged.connect(lambda value: self.update(self.label3, value, "Lightness"))
self.layout.addWidget(self.label1)
self.layout.addWidget(self.hue_slider)
self.layout.addWidget(self.label2)
self.layout.addWidget(self.chroma_slider)
self.layout.addWidget(self.label3)
self.layout.addWidget(self.lightness_slider)
self.setLayout(self.layout)
def update(self, label, value, slider_name):
label.setText(f"{slider_name} Value: {value}")
self.send_to_process({
'hue': self.hue_slider.value(),
'chroma': self.chroma_slider.value() / 100.0,
'lightness': self.lightness_slider.value() / 100.0
})
def process_image(self,hsv_image, values):
hue = values.get('hue', 0.0) / 2
chroma = values.get('chroma', 0.0) + 1.0
lightness = values.get('lightness', 0.0) + 1.0
hsv_image[..., 0] = (hsv_image[..., 0] + hue) % 180
# Adjust chroma (saturation)
hsv_image[..., 1] = np.clip(hsv_image[..., 1] * chroma, 0, 255)
# Adjust lightness (value)
hsv_image[..., 2] = np.clip(hsv_image[..., 2] * lightness, 0, 255)
return hsv_image