mirror of
https://github.com/wassname/scikit-image.git
synced 2026-07-01 19:49:58 +08:00
progress commit
This commit is contained in:
@@ -0,0 +1,309 @@
|
||||
# the module for the qt color_mixer plugin
|
||||
from PyQt4 import QtGui, QtCore
|
||||
from PyQt4.QtGui import (QWidget, QStackedWidget, QSlider, QVBoxLayout,
|
||||
QGridLayout, QLabel)
|
||||
|
||||
from util import ColorMixer
|
||||
|
||||
|
||||
|
||||
|
||||
class IntelligentSlider(QWidget):
|
||||
''' A slider that adds a 'name' attribute and calls a callback
|
||||
with 'name' as an argument to the registerd callback.
|
||||
|
||||
This allows you to create large groups of sliders in a loop,
|
||||
but still keep track of the individual events
|
||||
|
||||
It also prints a label below the slider.
|
||||
|
||||
The range of the slider is hardcoded from zero - 1000,
|
||||
but it supports a conversion factor so you can scale the results'''
|
||||
|
||||
def __init__(self, name, a, b, callback):
|
||||
QWidget.__init__(self)
|
||||
self.name = name
|
||||
self.callback = callback
|
||||
self.a = a
|
||||
self.b = b
|
||||
|
||||
self.slider = QSlider()
|
||||
self.slider.setRange(0, 1000)
|
||||
self.slider.setValue(500)
|
||||
self.slider.valueChanged.connect(self.slider_changed)
|
||||
|
||||
self.name_label = QLabel()
|
||||
self.name_label.setText(self.name)
|
||||
self.name_label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
|
||||
self.value_label = QLabel()
|
||||
self.value_label.setText(str(self.slider.value() * self.a + self.b))
|
||||
self.value_label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
|
||||
self.layout = QVBoxLayout(self)
|
||||
self.layout.addWidget(self.name_label)
|
||||
self.layout.addWidget(self.slider)
|
||||
self.layout.addWidget(self.value_label)
|
||||
|
||||
# bind this to the valueChanged signal of the slider
|
||||
def slider_changed(self, val):
|
||||
val = self.val()
|
||||
self.value_label.setText(str(val)[:4])
|
||||
self.callback(self.name, val)
|
||||
|
||||
def set_conv_fac(self, a, b):
|
||||
self.a = a
|
||||
self.b = b
|
||||
|
||||
def set_value(self, val):
|
||||
self.slider.setValue(int((val - self.a) / self.b))
|
||||
|
||||
def val(self):
|
||||
return self.value() * self.a + self.b
|
||||
|
||||
|
||||
class MixerPanel(QWidget):
|
||||
'''A color mixer to hook up to an image.
|
||||
You pass the image you the panel to operate on
|
||||
and it operates on that image in place. You also
|
||||
pass a callback to be called to trigger a refresh.
|
||||
This callback is called every time the mixer modifies
|
||||
your image.'''
|
||||
def __init__(self, img):
|
||||
QWidget.__init__(self)
|
||||
|
||||
self.img = img
|
||||
self.mixer = ColorMixer(self.img)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# ComboBox
|
||||
#---------------------------------------------------------------
|
||||
|
||||
self.combo_box_entries = ['RGB Color', 'HSV Color',
|
||||
'Brightness/Contrast',
|
||||
'Gamma (Sigmoidal)']
|
||||
self.combo_box = QtGui.QComboBox()
|
||||
for entry in self.combo_box_entries:
|
||||
self.combo_box.addItem(entry)
|
||||
self.combo_box.currentIndexChanged.connect(self.combo_box_changed)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# RGB color sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# radio buttons
|
||||
self.rgb_add = QtGui.QRadioButton('Additive')
|
||||
self.rgb_mul = QtGui.QRadioButton('Multiplicative')
|
||||
self.rgb_mul.toggled.connect(self.rgb_radio_changed)
|
||||
self.rgb_add.toggled.connect(self.rgb_radio_changed)
|
||||
|
||||
# sliders
|
||||
rs = IntelligentSlider('R', 0.51, -255, self.rgb_changed)
|
||||
gs = IntelligentSlider('G', 0.51, -255, self.rgb_changed)
|
||||
bs = IntelligentSlider('B', 0.51, -255, self.rgb_changed)
|
||||
self.rs = rs
|
||||
self.gs = gs
|
||||
self.bs = bs
|
||||
|
||||
self.rgb_widget = QWidget()
|
||||
self.rgb_widget.layout = QGridLayout(self.rgb_widget)
|
||||
self.rgb_widget.layout.addWidget(self.rgb_add, 0, 0, 1, 3)
|
||||
self.rgb_widget.layout.addWidget(self.rgb_mul, 1, 0, 1, 3)
|
||||
self.rgb_widget.layout.addWidget(self.rs, 2, 0)
|
||||
self.rgb_widget.layout.addWidget(self.gs, 2, 1)
|
||||
self.rgb_widget.layout.addWidget(self.bs, 2, 2)
|
||||
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# HSV sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# radio buttons
|
||||
self.hsv_add = QtGui.QRadioButton('Additive')
|
||||
self.hsv_mul = QtGui.QRadioButton('Multiplicative')
|
||||
self.hsv_mul.toggled.connect(self.hsv_radio_changed)
|
||||
self.hsv_mul.toggled.connect(self.hsv_radio_changed)
|
||||
|
||||
# sliders
|
||||
hs = IntelligentSlider('H', 0.36, -180, self.hsv_changed)
|
||||
ss = IntelligentSlider('S', 0.002, 0, self.hsv_changed)
|
||||
vs = IntelligentSlider('V', 0.002, 0, self.hsv_changed)
|
||||
self.hs = hs
|
||||
self.ss = ss
|
||||
self.vs = vs
|
||||
|
||||
self.hsv_widget = QWidget()
|
||||
self.hsv_widget.layout = QGridLayout(self.hsv_widget)
|
||||
self.hsv_widget.layout.addWidget(self.hsv_add, 0, 0, 1, 3)
|
||||
self.hsv_widget.layout.addWidget(self.hsv_mul, 1, 0, 1, 3)
|
||||
self.hsv_widget.layout.addWidget(self.hs, 2, 0)
|
||||
self.hsv_widget.layout.addWidget(self.ss, 2, 1)
|
||||
self.hsv_widget.layout.addWidget(self.vs, 2, 2)
|
||||
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Brightness/Contrast sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# sliders
|
||||
cont = IntelligentSlider('x', 0.002, 0, self.bright_changed)
|
||||
bright = IntelligentSlider('+', 0.51, -155, self.bright_changed)
|
||||
self.cont = cont
|
||||
self.bright = bright
|
||||
|
||||
# layout
|
||||
self.bright_widget = QWidget()
|
||||
self.bright_widget.layout = QtGui.QGridLayout(self.bright_widget)
|
||||
self.bright_widget.layout.addWidget(self.cont, 0, 0)
|
||||
self.bright_widget.layout.addWidget(self.bright, 0, 1)
|
||||
|
||||
|
||||
'''
|
||||
#---------------------------------------------------------------
|
||||
# Gamma sliders
|
||||
#---------------------------------------------------------------
|
||||
# sliders
|
||||
self.gamma_sliders = NSliderBlock(2,
|
||||
[(100, 1200, 100, 'alpha', 0.01),
|
||||
(0, 1200, 0, 'beta', 0.01)],
|
||||
self.gamma_changed)
|
||||
|
||||
# layout
|
||||
self.gamma_widget = QWidget()
|
||||
self.gamma_widget.layout = QtGui.QGridLayout(self.gamma_widget)
|
||||
self.gamma_widget.layout.addWidget(self.gamma_sliders, 0, 0)
|
||||
'''
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Buttons
|
||||
#---------------------------------------------------------------
|
||||
self.commit_button = QtGui.QPushButton('Commit')
|
||||
self.commit_button.clicked.connect(self.commit_changes)
|
||||
self.revert_button = QtGui.QPushButton('Revert')
|
||||
self.revert_button.clicked.connect(self.revert_changes)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Mixer Layout
|
||||
#---------------------------------------------------------------
|
||||
self.sliders = QStackedWidget()
|
||||
self.sliders.addWidget(self.rgb_widget)
|
||||
self.sliders.addWidget(self.hsv_widget)
|
||||
self.sliders.addWidget(self.bright_widget)
|
||||
|
||||
self.layout = QtGui.QGridLayout(self)
|
||||
self.layout.addWidget(self.combo_box, 0, 0)
|
||||
self.layout.addWidget(self.sliders, 1, 0)
|
||||
self.layout.addWidget(self.commit_button, 2, 0)
|
||||
self.layout.addWidget(self.revert_button, 3, 0)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Initialization
|
||||
#---------------------------------------------------------------
|
||||
|
||||
self.combo_box.setCurrentIndex(0)
|
||||
self.sliders.setCurrentIndex(2)
|
||||
#self.hide_sliders()
|
||||
#self.rgb_widget.show()
|
||||
#self.rgb_mul.setChecked(True)
|
||||
#self.hsv_mul.setChecked(True)
|
||||
|
||||
def rgb_changed(self, name, val):
|
||||
pass
|
||||
|
||||
|
||||
def hsv_changed(self, name, val):
|
||||
pass
|
||||
|
||||
def bright_changed(self, name, val):
|
||||
# doesnt matter which slider changed we need both
|
||||
# values
|
||||
factor = self.bright_sliders.sliders['x'].conv_val()
|
||||
offset = self.bright_sliders.sliders['+'].conv_val()
|
||||
self.mixer.brightness(offset, factor)
|
||||
self.update()
|
||||
|
||||
def gamma_changed(self, name, val):
|
||||
# doesnt matter which slider changed we need both
|
||||
# values
|
||||
alpha = self.gamma_sliders.sliders['alpha'].conv_val()
|
||||
beta = self.gamma_sliders.sliders['beta'].conv_val()
|
||||
self.mixer.sigmoid_gamma(alpha, beta)
|
||||
self.update()
|
||||
|
||||
def iter_all_sliders(self):
|
||||
pass
|
||||
|
||||
def reset_sliders(self):
|
||||
self.rgb_add_sliders.set_sliders({'R': 0, 'G': 0, 'B': 0})
|
||||
self.rgb_mul_sliders.set_sliders({'R': 500, 'G': 500, 'B': 500})
|
||||
self.hsv_add_sliders.set_sliders({'H': 0, 'S': 0, 'V': 0})
|
||||
self.hsv_mul_sliders.set_sliders({'H': 0, 'S': 500, 'V': 500})
|
||||
self.bright_sliders.set_sliders({'+': 0, 'x': 500})
|
||||
self.gamma_sliders.set_sliders({'alpha': 100, 'beta': 0})
|
||||
|
||||
def combo_box_changed(self, index):
|
||||
self.reset_sliders()
|
||||
self.mixer.set_to_stateimg()
|
||||
self.update()
|
||||
combo_box_map={0: self.show_rgb, 1: self.show_hsv,
|
||||
2: self.show_bright, 3: self.show_gamma}
|
||||
combo_box_map[index]()
|
||||
|
||||
def hide_sliders(self):
|
||||
self.rgb_widget.hide()
|
||||
self.hsv_widget.hide()
|
||||
self.bright_widget.hide()
|
||||
self.gamma_sliders.hide()
|
||||
|
||||
def rgb_radio_changed(self):
|
||||
if self.rgb_add.isChecked():
|
||||
self.rgb_add_sliders.show()
|
||||
self.rgb_mul_sliders.hide()
|
||||
elif self.rgb_mul.isChecked():
|
||||
self.rgb_mul_sliders.show()
|
||||
self.rgb_add_sliders.hide()
|
||||
else:
|
||||
pass
|
||||
|
||||
self.reset_sliders()
|
||||
self.mixer.set_to_stateimg()
|
||||
self.update()
|
||||
|
||||
def hsv_radio_changed(self):
|
||||
if self.hsv_add.isChecked():
|
||||
self.hsv_add_sliders.show()
|
||||
self.hsv_mul_sliders.hide()
|
||||
elif self.hsv_mul.isChecked():
|
||||
self.hsv_mul_sliders.show()
|
||||
self.hsv_add_sliders.hide()
|
||||
else:
|
||||
pass
|
||||
|
||||
self.reset_sliders()
|
||||
self.mixer.set_to_stateimg()
|
||||
self.update()
|
||||
|
||||
def show_rgb(self):
|
||||
self.hide_sliders()
|
||||
self.rgb_widget.show()
|
||||
|
||||
def show_hsv(self):
|
||||
self.hide_sliders()
|
||||
self.hsv_widget.show()
|
||||
|
||||
def show_bright(self):
|
||||
self.hide_sliders()
|
||||
self.bright_widget.show()
|
||||
|
||||
def show_gamma(self):
|
||||
self.hide_sliders()
|
||||
self.gamma_sliders.show()
|
||||
|
||||
def commit_changes(self):
|
||||
self.mixer.commit_changes()
|
||||
self.update()
|
||||
|
||||
def revert_changes(self):
|
||||
self.mixer.revert()
|
||||
self.reset_sliders()
|
||||
self.update()
|
||||
@@ -1,4 +1,4 @@
|
||||
from util import prepare_for_display, window_manager, GuiLockError, ColorMixer
|
||||
from util import prepare_for_display, window_manager, GuiLockError
|
||||
|
||||
import numpy as np
|
||||
import sys
|
||||
@@ -17,6 +17,7 @@ else:
|
||||
QLabel, QWidget, QVBoxLayout, QSlider,
|
||||
QPainter, QColor, QFrame)
|
||||
from PyQt4 import QtCore, QtGui
|
||||
from q_color_mixer import MixerPanel
|
||||
|
||||
except ImportError:
|
||||
print 'PyQT4 libraries not installed. Plugin not loaded.'
|
||||
@@ -73,380 +74,6 @@ else:
|
||||
pass
|
||||
|
||||
|
||||
class IntelligentSlider(QSlider):
|
||||
''' A slider that adds a 'name' attribute and calls a callback
|
||||
with 'name' as an argument to the registerd callback.
|
||||
|
||||
This allows you to create large groups of sliders in a loop,
|
||||
but still keep track of the individual events'''
|
||||
|
||||
def __init__(self, name, callback, conv_fac):
|
||||
QSlider.__init__(self)
|
||||
self.name = name
|
||||
self.callback = callback
|
||||
self.conv_fac = conv_fac
|
||||
|
||||
self.name_label = QLabel()
|
||||
self.name_label.setText(self.name)
|
||||
self.name_label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
|
||||
self.value_label = QLabel()
|
||||
self.value_label.setText('')
|
||||
self.value_label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
|
||||
# bind this to the valueChanged signal of the slider
|
||||
def i_changed(self, val):
|
||||
val = self.conv_val()
|
||||
self.value_label.setText(str(val)[:4])
|
||||
self.callback(self.name, val)
|
||||
|
||||
def conv_val(self):
|
||||
return self.value() * self.conv_fac
|
||||
|
||||
|
||||
class NSliderBlock(QWidget):
|
||||
'''Creates a block of n sliders with ranges
|
||||
specified as a list of tuples. The fourth entry
|
||||
in the tuple will be used as a dictionary key
|
||||
so you can access the slider later.
|
||||
So the tuple should be (min, max, initial, name)
|
||||
|
||||
The callback is the function to be called
|
||||
when a slider value changes. The callback will be
|
||||
called with the following arguments (name, value).
|
||||
|
||||
You can get a hook to a specific slider using
|
||||
NSliderBlock.sliders[name]
|
||||
|
||||
'''
|
||||
|
||||
def __init__(self, n, ranges_labels, callback):
|
||||
QWidget.__init__(self)
|
||||
|
||||
if len(ranges_labels) != n:
|
||||
raise ValueError('not enough or too many ranges supplied')
|
||||
|
||||
self.callback = callback
|
||||
|
||||
# each key will give you
|
||||
self.sliders = {}
|
||||
self.layout = QtGui.QGridLayout(self)
|
||||
|
||||
for i in range(n):
|
||||
params = ranges_labels[i]
|
||||
if len(params) != 5:
|
||||
raise ValueError('Tuples must be length 4')
|
||||
|
||||
name = params[3]
|
||||
conv_fac = params[4]
|
||||
|
||||
slider = IntelligentSlider(name, self.callback, conv_fac)
|
||||
slider.setMinimum(params[0])
|
||||
slider.setMaximum(params[1])
|
||||
slider.setValue(params[2])
|
||||
slider.valueChanged.connect(slider.i_changed)
|
||||
|
||||
self.sliders[name] = slider
|
||||
|
||||
self.layout.addWidget(slider.name_label, 0, i)
|
||||
self.layout.addWidget(slider, 1, i, QtCore.Qt.AlignHCenter)
|
||||
self.layout.addWidget(slider.value_label, 2, i)
|
||||
|
||||
self.layout.setColumnMinimumWidth(i, 50)
|
||||
|
||||
def set_sliders(self, vals):
|
||||
# vals should a dict to of slider names and set vals
|
||||
if len(vals) != len(self.sliders):
|
||||
raise ValueError('Wrong number of values')
|
||||
|
||||
for key, value in vals.iteritems():
|
||||
self.sliders[key].setValue(value)
|
||||
|
||||
class MixerPanel(QWidget):
|
||||
'''A color mixer to hook up to an image.
|
||||
You pass the image you the panel to operate on
|
||||
and it operates on that image in place. You also
|
||||
pass a callback to be called to trigger a refresh.
|
||||
This callback is called every time the mixer modifies
|
||||
your image.'''
|
||||
def __init__(self, img, callback):
|
||||
QWidget.__init__(self)
|
||||
|
||||
self.img = img
|
||||
self.update = callback
|
||||
self.mixer = ColorMixer(self.img)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# ComboBox
|
||||
#---------------------------------------------------------------
|
||||
|
||||
self.combo_box_entries = ['RGB Color', 'HSV Color',
|
||||
'Brightness/Contrast',
|
||||
'Gamma (Sigmoidal)']
|
||||
self.combo_box = QtGui.QComboBox()
|
||||
for entry in self.combo_box_entries:
|
||||
self.combo_box.addItem(entry)
|
||||
self.combo_box.currentIndexChanged.connect(self.combo_box_changed)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# RGB color sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# radio buttons
|
||||
self.rgb_add = QtGui.QRadioButton('Additive')
|
||||
self.rgb_mul = QtGui.QRadioButton('Multiplicative')
|
||||
self.rgb_mul.toggled.connect(self.rgb_radio_changed)
|
||||
self.rgb_add.toggled.connect(self.rgb_radio_changed)
|
||||
|
||||
# additive sliders
|
||||
self.rgb_add_sliders = NSliderBlock(3, [(-255, 255, 0, 'R', 1),
|
||||
(-255, 255, 0, 'G', 1),
|
||||
(-255, 255, 0, 'B', 1)],
|
||||
self.rgb_add_changed)
|
||||
|
||||
# multiplicative sliders
|
||||
self.rgb_mul_sliders = NSliderBlock(3, [(0, 1000, 500, 'R', .002),
|
||||
(0, 1000, 500, 'G', .002),
|
||||
(0, 1000, 500, 'B', .002)],
|
||||
self.rgb_mul_changed)
|
||||
|
||||
# layout
|
||||
self.rgb_widget = QWidget()
|
||||
self.rgb_widget.layout = QtGui.QGridLayout(self.rgb_widget)
|
||||
self.rgb_widget.layout.addWidget(self.rgb_add, 0, 0)
|
||||
self.rgb_widget.layout.addWidget(self.rgb_mul, 1, 0)
|
||||
self.rgb_widget.layout.addWidget(self.rgb_add_sliders, 2, 0)
|
||||
self.rgb_widget.layout.addWidget(self.rgb_mul_sliders, 2, 0)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# HSV sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# radio buttons
|
||||
self.hsv_add = QtGui.QRadioButton('Additive')
|
||||
self.hsv_mul = QtGui.QRadioButton('Multiplicative')
|
||||
self.hsv_mul.toggled.connect(self.hsv_radio_changed)
|
||||
self.hsv_add.toggled.connect(self.hsv_radio_changed)
|
||||
|
||||
# additive sliders
|
||||
self.hsv_add_sliders = NSliderBlock(3, [(-180, 180, 0, 'H', 1),
|
||||
(-100, 100, 0, 'S', .01),
|
||||
(-100, 100, 0, 'V', .01)],
|
||||
self.hsv_add_changed)
|
||||
|
||||
# multiplicative sliders
|
||||
self.hsv_mul_sliders = NSliderBlock(3, [(-180, 180, 0, 'H', 1),
|
||||
(0, 1000, 500, 'S', .002),
|
||||
(0, 1000, 500, 'V', .002)],
|
||||
self.hsv_mul_changed)
|
||||
|
||||
# layout
|
||||
self.hsv_widget = QWidget()
|
||||
self.hsv_widget.layout = QtGui.QGridLayout(self.hsv_widget)
|
||||
self.hsv_widget.layout.addWidget(self.hsv_add, 0, 0)
|
||||
self.hsv_widget.layout.addWidget(self.hsv_mul, 1, 0)
|
||||
self.hsv_widget.layout.addWidget(self.hsv_add_sliders, 2, 0)
|
||||
self.hsv_widget.layout.addWidget(self.hsv_mul_sliders, 2, 0)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Brightness sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# sliders
|
||||
self.bright_sliders = NSliderBlock(2,
|
||||
[(0, 1000, 500, 'x', 0.002),
|
||||
(-255, 255, 0, '+', 1)],
|
||||
self.bright_changed)
|
||||
|
||||
# layout
|
||||
self.bright_widget = QWidget()
|
||||
self.bright_widget.layout = QtGui.QGridLayout(self.bright_widget)
|
||||
self.bright_widget.layout.addWidget(self.bright_sliders, 0, 0)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Gamma sliders
|
||||
#---------------------------------------------------------------
|
||||
# sliders
|
||||
self.gamma_sliders = NSliderBlock(2,
|
||||
[(100, 1200, 100, 'alpha', 0.01),
|
||||
(0, 1200, 0, 'beta', 0.01)],
|
||||
self.gamma_changed)
|
||||
|
||||
# layout
|
||||
self.gamma_widget = QWidget()
|
||||
self.gamma_widget.layout = QtGui.QGridLayout(self.gamma_widget)
|
||||
self.gamma_widget.layout.addWidget(self.gamma_sliders, 0, 0)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Buttons
|
||||
#---------------------------------------------------------------
|
||||
self.commit_button = QtGui.QPushButton('Commit')
|
||||
self.commit_button.clicked.connect(self.commit_changes)
|
||||
self.revert_button = QtGui.QPushButton('Revert')
|
||||
self.revert_button.clicked.connect(self.revert_changes)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Mixer Layout
|
||||
#---------------------------------------------------------------
|
||||
self.layout = QtGui.QGridLayout(self)
|
||||
self.layout.addWidget(self.combo_box, 0, 0)
|
||||
self.layout.addWidget(self.rgb_widget, 1, 0)
|
||||
self.layout.addWidget(self.hsv_widget, 1, 0)
|
||||
self.layout.addWidget(self.gamma_widget, 1, 0)
|
||||
self.layout.addWidget(self.bright_widget, 1, 0)
|
||||
|
||||
self.layout.addWidget(self.commit_button, 2, 0)
|
||||
self.layout.addWidget(self.revert_button, 3, 0)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Initialization
|
||||
#---------------------------------------------------------------
|
||||
|
||||
self.combo_box.setCurrentIndex(0)
|
||||
self.hide_sliders()
|
||||
self.rgb_widget.show()
|
||||
self.rgb_mul.setChecked(True)
|
||||
self.hsv_mul.setChecked(True)
|
||||
|
||||
def rgb_add_changed(self, name, val):
|
||||
if not self.rgb_add.isChecked():
|
||||
return
|
||||
if name == 'R':
|
||||
self.mixer.add(self.mixer.RED, val)
|
||||
elif name == 'G':
|
||||
self.mixer.add(self.mixer.GREEN, val)
|
||||
elif name == 'B':
|
||||
self.mixer.add(self.mixer.BLUE, val)
|
||||
else:
|
||||
return
|
||||
self.update()
|
||||
|
||||
def rgb_mul_changed(self, name, val):
|
||||
if not self.rgb_mul.isChecked():
|
||||
return
|
||||
if name == 'R':
|
||||
self.mixer.multiply(self.mixer.RED, val)
|
||||
elif name == 'G':
|
||||
self.mixer.multiply(self.mixer.GREEN, val)
|
||||
elif name == 'B':
|
||||
self.mixer.multiply(self.mixer.BLUE, val)
|
||||
else:
|
||||
return
|
||||
self.update()
|
||||
|
||||
def hsv_add_changed(self, name, val):
|
||||
if not self.hsv_add.isChecked():
|
||||
return
|
||||
h = self.hsv_add_sliders.sliders['H'].conv_val()
|
||||
s = self.hsv_add_sliders.sliders['S'].conv_val()
|
||||
v = self.hsv_add_sliders.sliders['V'].conv_val()
|
||||
self.mixer.hsv_add(h, s, v)
|
||||
self.update()
|
||||
|
||||
def hsv_mul_changed(self, name, val):
|
||||
if not self.hsv_mul.isChecked():
|
||||
return
|
||||
h = self.hsv_mul_sliders.sliders['H'].conv_val()
|
||||
s = self.hsv_mul_sliders.sliders['S'].conv_val()
|
||||
v = self.hsv_mul_sliders.sliders['V'].conv_val()
|
||||
self.mixer.hsv_multiply(h, s, v)
|
||||
self.update()
|
||||
|
||||
def bright_changed(self, name, val):
|
||||
# doesnt matter which slider changed we need both
|
||||
# values
|
||||
factor = self.bright_sliders.sliders['x'].conv_val()
|
||||
offset = self.bright_sliders.sliders['+'].conv_val()
|
||||
self.mixer.brightness(offset, factor)
|
||||
self.update()
|
||||
|
||||
def gamma_changed(self, name, val):
|
||||
# doesnt matter which slider changed we need both
|
||||
# values
|
||||
alpha = self.gamma_sliders.sliders['alpha'].conv_val()
|
||||
beta = self.gamma_sliders.sliders['beta'].conv_val()
|
||||
self.mixer.sigmoid_gamma(alpha, beta)
|
||||
self.update()
|
||||
|
||||
def iter_all_sliders(self):
|
||||
pass
|
||||
|
||||
def reset_sliders(self):
|
||||
self.rgb_add_sliders.set_sliders({'R': 0, 'G': 0, 'B': 0})
|
||||
self.rgb_mul_sliders.set_sliders({'R': 500, 'G': 500, 'B': 500})
|
||||
self.hsv_add_sliders.set_sliders({'H': 0, 'S': 0, 'V': 0})
|
||||
self.hsv_mul_sliders.set_sliders({'H': 0, 'S': 500, 'V': 500})
|
||||
self.bright_sliders.set_sliders({'+': 0, 'x': 500})
|
||||
self.gamma_sliders.set_sliders({'alpha': 100, 'beta': 0})
|
||||
|
||||
def combo_box_changed(self, index):
|
||||
self.reset_sliders()
|
||||
self.mixer.set_to_stateimg()
|
||||
self.update()
|
||||
combo_box_map={0: self.show_rgb, 1: self.show_hsv,
|
||||
2: self.show_bright, 3: self.show_gamma}
|
||||
combo_box_map[index]()
|
||||
|
||||
def hide_sliders(self):
|
||||
self.rgb_widget.hide()
|
||||
self.hsv_widget.hide()
|
||||
self.bright_widget.hide()
|
||||
self.gamma_sliders.hide()
|
||||
|
||||
def rgb_radio_changed(self):
|
||||
if self.rgb_add.isChecked():
|
||||
self.rgb_add_sliders.show()
|
||||
self.rgb_mul_sliders.hide()
|
||||
elif self.rgb_mul.isChecked():
|
||||
self.rgb_mul_sliders.show()
|
||||
self.rgb_add_sliders.hide()
|
||||
else:
|
||||
pass
|
||||
|
||||
self.reset_sliders()
|
||||
self.mixer.set_to_stateimg()
|
||||
self.update()
|
||||
|
||||
def hsv_radio_changed(self):
|
||||
if self.hsv_add.isChecked():
|
||||
self.hsv_add_sliders.show()
|
||||
self.hsv_mul_sliders.hide()
|
||||
elif self.hsv_mul.isChecked():
|
||||
self.hsv_mul_sliders.show()
|
||||
self.hsv_add_sliders.hide()
|
||||
else:
|
||||
pass
|
||||
|
||||
self.reset_sliders()
|
||||
self.mixer.set_to_stateimg()
|
||||
self.update()
|
||||
|
||||
def show_rgb(self):
|
||||
self.hide_sliders()
|
||||
self.rgb_widget.show()
|
||||
|
||||
def show_hsv(self):
|
||||
self.hide_sliders()
|
||||
self.hsv_widget.show()
|
||||
|
||||
def show_bright(self):
|
||||
self.hide_sliders()
|
||||
self.bright_widget.show()
|
||||
|
||||
def show_gamma(self):
|
||||
self.hide_sliders()
|
||||
self.gamma_sliders.show()
|
||||
|
||||
def commit_changes(self):
|
||||
self.mixer.commit_changes()
|
||||
self.update()
|
||||
|
||||
def revert_changes(self):
|
||||
self.mixer.revert()
|
||||
self.reset_sliders()
|
||||
self.update()
|
||||
|
||||
|
||||
class RGBHSVDisplay(QWidget):
|
||||
def __init__(self):
|
||||
QWidget.__init__(self)
|
||||
@@ -621,7 +248,7 @@ else:
|
||||
self.label.setMouseTracking(True)
|
||||
self.label.setMinimumSize(QtCore.QSize(100, 100))
|
||||
|
||||
self.mixer_panel = MixerPanel(self.arr, self.refresh_image)
|
||||
self.mixer_panel = MixerPanel(self.arr)
|
||||
self.layout.addWidget(self.mixer_panel, 0, 2)
|
||||
self.mixer_panel.show()
|
||||
|
||||
@@ -644,6 +271,7 @@ else:
|
||||
self.layout.addWidget(self.save_variable, 1, 1)
|
||||
self.layout.addWidget(self.save_file, 1, 2)
|
||||
|
||||
''''
|
||||
# hook up the mixer sliders move events to trigger a
|
||||
# histogram redraw.
|
||||
self.mixer_panel.rgb_add_sliders.sliders['R'].\
|
||||
@@ -674,6 +302,7 @@ else:
|
||||
sliderMoved.connect(self.update_histogram)
|
||||
self.mixer_panel.bright_sliders.sliders['x'].\
|
||||
sliderMoved.connect(self.update_histogram)
|
||||
'''
|
||||
|
||||
def update_histogram(self):
|
||||
self.rgb_hist.update_hists(self.calc_hist())
|
||||
|
||||
Reference in New Issue
Block a user