hogeoge enhancer version 14
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
hogeoge
todo
ホワイトポイント取得、範囲外は無視する
# ホワイトポイント補正
今は白に補正しているが、任意の色に補正したい(肌色を保存しておきたい)
HSV全て調節できるようにしたい
# カスタムwidget作成
・designerでまずは作ってUIのコードだけ利用しよう
・初期設定は黒線で枠取りして、色表示の■は白で塗る、色は self.color
・setcolor 関数で親からQColor をもらったら、self.colorにセット、update、setRGB、setHSV(スライダ)
・RGBの値が変わったら getRGB で全て変更
・スライダーが変わったら getHSV で全て変更
・色が変わったら親に知らせるシグナルを実装
```
class showcolor(QWidget):
# シグナルを作成
colochanged = pyqtSignal( QColor )
def __init(self,oya)__
super().__init__()
< UI CODE >
# trigger --> lineEditctrl void textEdited (const QString&)
# trigger --> sliderMoved (int)
self.color=QColor(255,255,255)
def setcolor(self,c):
self,color=c
self.update()
self.setRGB()
self.setHSV()
def setRGB(self):
self.lineEdit.setText( str(self.color[0]))
self.lineEdit.setText( str(self.color[1]))
self.lineEdit.setText( str(self.color[2]))
def getRGB(self):
self.color = QColor( int(self.lineEdit.text()),int(self.lineEdit.text()),int(self.lineEdit.text()))
self.update()
self.setHSV()
self.colochanged.emit(self.color)
# H:0-359 s:0-255 v:0-255
# (int h, int s, int v, int alpha) QColor.getHsv (self)
def setHSV(self):
h,s,v,a = self.color.getHSV()
self.slider.setValue( h)
self.slider.setValue( s)
self.slider.setValue( v)
self.label.setText(str(h))
self.label.setText(str(s))
self.label.setText(str(v))
# QColor QColor.fromHsv (int h, int s, int v, int alpha = 255)
def getHSV(self):
self.color= Qcolor( QColor.fromHsv( self.slider.value() , self.slider.value() ,self.slider.value() )
self.update()
self.setRGB()
self.colochanged.emit(self.color)
```
# 三色独立したベジェカーブ
・フォルダを全く別に作って開発しよう、ベースは引き継ぐが不要なクラスは削除
・現在のUIを変更、下にカーブを三つおいた。左に元画像を置く
・ベジェクラスは最初に本体から自分の色をもらって、その色でカーブを描画して本体にデータを送る
・本体は bezie 関数でデータを受けて、LUTを作る。sender() で色を判定する
・テーブルは self.LUT[[256],[256],[256]] で、initで直線データで初期化しておく
・bezie 関数は一度に一色のデータ変更しか受け付けない
・bezie 関数でLUTを作ったらすぐに変換後の画像を作って( self.img → self.enhanced )update でdrawを呼ぶ
・ヒストグラムの単純な平行移動ルーチンを作りたい
・三色のシンクロモードを作りたい
・マスクをかけないので enhanced と current は等しいから、どっちか削除でも良いかな
```
# 初期化
self.LUT = [ [i for i in range(256)] for l in range(3) ]
# 平行移動 +a
# スライダー置いてコネクト、0-300、150に設定
def parallel( self , a ):
a = a-150
if a > 0 :
self.LUT[0] = [i+a if i+a <256 else 255 for i in range(256) ]
self.LUT[0][0]=0
else :
self.LUT[1] = [i+a if i+a >0 else 0 for i in range(256) ]
```
----
# ベジェ曲線の座標の求め方について
- Qtはベジェ曲線を描画しているのだから座標も持ってるはずだと思いドキュメントを見てみたらこんなメッソドがあった
QPointF QPainterPath.pointAtPercent (self, float t)
このtは0-1で指定することになっていて、ベジェそのものですね
- Qtもあくまでtベースでしか値は返してくれないって事だな
内部的にはどういう実装なんだろう?
曲線とは言ってもPCだから全てはドットの描画でしかないはずだ
でもドットだとx値が飛ぶところでは間が空くはずだ
でもパスだからどんなに拡大しても綺麗に描画出来るように実装されてるはずだ
やはり全てのx値を計算して求めてるんだろうか?
だとしたらそういう関数を用意してくれても良いと思うんだが・・・
- 今は自分でx,yを求めてるが、Qtの関数を使ってみるか???
結果が同じかどうかを調べてみるとか・・・
意味ないかな?
todo
ホワイトポイント取得、範囲外は無視する
ホワイトポイント補正
今は白に補正しているが、任意の色に補正したい(肌色を保存しておきたい)
HSV全て調節できるようにしたい
カスタムwidget作成
・designerでまずは作ってUIのコードだけ利用しよう
・初期設定は黒線で枠取りして、色表示の■は白で塗る、色は self.color
・setcolor 関数で親からQColor をもらったら、self.colorにセット、update、setRGB、setHSV(スライダ)
・RGBの値が変わったら getRGB で全て変更
・スライダーが変わったら getHSV で全て変更
・色が変わったら親に知らせるシグナルを実装
class showcolor(QWidget):
# シグナルを作成
colochanged = pyqtSignal( QColor )
def __init(self,oya)__
super().__init__()
< UI CODE >
# trigger --> lineEditctrl void textEdited (const QString&)
# trigger --> sliderMoved (int)
self.color=QColor(255,255,255)
def setcolor(self,c):
self,color=c
self.update()
self.setRGB()
self.setHSV()
def setRGB(self):
self.lineEdit.setText( str(self.color[0]))
self.lineEdit.setText( str(self.color[1]))
self.lineEdit.setText( str(self.color[2]))
def getRGB(self):
self.color = QColor( int(self.lineEdit.text()),int(self.lineEdit.text()),int(self.lineEdit.text()))
self.update()
self.setHSV()
self.colochanged.emit(self.color)
# H:0-359 s:0-255 v:0-255
# (int h, int s, int v, int alpha) QColor.getHsv (self)
def setHSV(self):
h,s,v,a = self.color.getHSV()
self.slider.setValue( h)
self.slider.setValue( s)
self.slider.setValue( v)
self.label.setText(str(h))
self.label.setText(str(s))
self.label.setText(str(v))
# QColor QColor.fromHsv (int h, int s, int v, int alpha = 255)
def getHSV(self):
self.color= Qcolor( QColor.fromHsv( self.slider.value() , self.slider.value() ,self.slider.value() )
self.update()
self.setRGB()
self.colochanged.emit(self.color)
三色独立したベジェカーブ
・フォルダを全く別に作って開発しよう、ベースは引き継ぐが不要なクラスは削除
・現在のUIを変更、下にカーブを三つおいた。左に元画像を置く
・ベジェクラスは最初に本体から自分の色をもらって、その色でカーブを描画して本体にデータを送る
・本体は bezie 関数でデータを受けて、LUTを作る。sender() で色を判定する
・テーブルは self.LUT[[256],[256],[256]] で、initで直線データで初期化しておく
・bezie 関数は一度に一色のデータ変更しか受け付けない
・bezie 関数でLUTを作ったらすぐに変換後の画像を作って( self.img → self.enhanced )update でdrawを呼ぶ
・ヒストグラムの単純な平行移動ルーチンを作りたい
・三色のシンクロモードを作りたい
・マスクをかけないので enhanced と current は等しいから、どっちか削除でも良いかな
# 初期化
self.LUT = [ [i for i in range(256)] for l in range(3) ]
# 平行移動 +a
# スライダー置いてコネクト、0-300、150に設定
def parallel( self , a ):
a = a-150
if a > 0 :
self.LUT[0] = [i+a if i+a <256 else 255 for i in range(256) ]
self.LUT[0][0]=0
else :
self.LUT[1] = [i+a if i+a >0 else 0 for i in range(256) ]
ベジェ曲線の座標の求め方について
- Qtはベジェ曲線を描画しているのだから座標も持ってるはずだと思いドキュメントを見てみたらこんなメッソドがあった
QPointF QPainterPath.pointAtPercent (self, float t)
このtは0-1で指定することになっていて、ベジェそのものですね - Qtもあくまでtベースでしか値は返してくれないって事だな
内部的にはどういう実装なんだろう?
曲線とは言ってもPCだから全てはドットの描画でしかないはずだ
でもドットだとx値が飛ぶところでは間が空くはずだ
でもパスだからどんなに拡大しても綺麗に描画出来るように実装されてるはずだ
やはり全てのx値を計算して求めてるんだろうか?
だとしたらそういう関数を用意してくれても良いと思うんだが・・・ - 今は自分でx,yを求めてるが、Qtの関数を使ってみるか???
結果が同じかどうかを調べてみるとか・・・
意味ないかな?