studia/jezyki-skryptowe/image-editor/HCLDialog.py
2024-06-17 20:42:01 +02:00

72 lines
2.5 KiB
Python

import abc
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 HCLDialog(ImageParameterDialog):
def __init__(self, hsv_image):
super().__init__(hsv_image, ImageProcessingWorker.HLSImageProcessingWorker)
self.setWindowTitle("HCL Correction")
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.layout.addWidget(self.button_box)
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)
lightness = values.get('lightness', 0.0)
hsv_image[..., 0] = (hsv_image[..., 0] + hue) % 180
hsv_image[..., 1] += (255 * lightness)
hsv_image[..., 1] = np.clip(hsv_image[..., 1], 0, 255)
hsv_image[..., 2] += (255 * chroma)
hsv_image[..., 2] = np.clip(hsv_image[..., 2], 0, 255)
return hsv_image