ソースを参照

Optimize the brightness contrast adjustment

Unify the naming style of variables, add specific numerical display labels, and speed up the response speed of adjustments (especially for large images)
PairZhu 11 ヶ月 前
コミット
d2370f63fd
1 ファイル変更23 行追加15 行削除
  1. 23 15
      labelme/widgets/brightness_contrast_dialog.py

+ 23 - 15
labelme/widgets/brightness_contrast_dialog.py

@@ -1,10 +1,8 @@
 import PIL.Image
 import PIL.ImageEnhance
-from qtpy import QtGui
 from qtpy import QtWidgets
 from qtpy.QtCore import Qt
-
-from .. import utils
+from qtpy.QtGui import QImage
 
 
 class BrightnessContrastDialog(QtWidgets.QDialog):
@@ -13,28 +11,29 @@ class BrightnessContrastDialog(QtWidgets.QDialog):
         self.setModal(True)
         self.setWindowTitle("Brightness/Contrast")
 
-        self.slider_brightness = self._create_slider()
-        self.slider_contrast = self._create_slider()
+        self.slider_brightness, widget_brightness = self._create_slider()
+        self.slider_contrast, widget_contrast = self._create_slider()
 
-        formLayout = QtWidgets.QFormLayout()
-        formLayout.addRow(self.tr("Brightness"), self.slider_brightness)
-        formLayout.addRow(self.tr("Contrast"), self.slider_contrast)
-        self.setLayout(formLayout)
+        form_layout = QtWidgets.QFormLayout()
+        form_layout.addRow(self.tr("Brightness"), widget_brightness)
+        form_layout.addRow(self.tr("Contrast"), widget_contrast)
+        self.setLayout(form_layout)
 
         assert isinstance(img, PIL.Image.Image)
         self.img = img
         self.callback = callback
 
-    def onNewValue(self, value):
+    def onNewValue(self, _):
         brightness = self.slider_brightness.value() / 50.0
         contrast = self.slider_contrast.value() / 50.0
 
         img = self.img
-        img = PIL.ImageEnhance.Brightness(img).enhance(brightness)
-        img = PIL.ImageEnhance.Contrast(img).enhance(contrast)
+        if brightness != 1:
+            img = PIL.ImageEnhance.Brightness(img).enhance(brightness)
+        if contrast != 1:
+            img = PIL.ImageEnhance.Contrast(img).enhance(contrast)
 
-        img_data = utils.img_pil_to_data(img)
-        qimage = QtGui.QImage.fromData(img_data)
+        qimage = QImage(img.tobytes(), img.width, img.height, QImage.Format_RGB888)
         self.callback(qimage)
 
     def _create_slider(self):
@@ -42,4 +41,13 @@ class BrightnessContrastDialog(QtWidgets.QDialog):
         slider.setRange(0, 150)
         slider.setValue(50)
         slider.valueChanged.connect(self.onNewValue)
-        return slider
+        value_label = QtWidgets.QLabel(f"{slider.value() / 50:.2f}")
+        slider.valueChanged.connect(
+            lambda value: value_label.setText(f"{value / 50:.2f}")
+        )
+        layout = QtWidgets.QHBoxLayout()
+        layout.addWidget(slider)
+        layout.addWidget(value_label)
+        widget = QtWidgets.QWidget()
+        widget.setLayout(layout)
+        return slider, widget