import numpy as np from PyQt6.QtWidgets import QLabel, QVBoxLayout, QSlider from PyQt6.QtCore import Qt from .. import ImageProcessingWorker from .ImageParameterDialog import ImageParameterDialog class HCLDialog(ImageParameterDialog): def __init__(self, image): super().__init__(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: 0") self.label2 = QLabel("Chroma: 0") self.label3 = QLabel("Lightness: 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}") 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,image, values): hue = values.get('hue', 0.0) / 2 chroma = values.get('chroma', 0.0) lightness = values.get('lightness', 0.0) image[..., 0] = (image[..., 0] + hue) % 180 image[..., 1] += (255 * lightness) image[..., 1] = np.clip(image[..., 1], 0, 255) image[..., 2] += (255 * chroma) image[..., 2] = np.clip(image[..., 2], 0, 255) return image @classmethod def dialog_name(cls): return "Hue-Chroma-Lightness"