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 @classmethod def dialog_name(cls): return "Hue-Chroma-Lightness"