Nanashi-softプログラマ専用Photoshopプラグイン開発


◇Photoshopプラグイン開発 -ダイアログ調整-

実際に使用して思ったのが,ディザリング抑制の有無をコントロールしたい
腕や脚の肌の部分はディザリングを強くかけたいし
目や飾りの部分はディザリングを抑制して,ザラザラ感を抑えたい

元のサンプルが,ダイアログを表示して設定可能になっていたので,こいつを乗っ取ろうと思います

・設計
Amountのところを%では無く,ディザリングのRGB閾値にしたい
Clearをチェックすると,ディザリングなし
Coolをチェックすると,ディザリングあり
この文字列も変更できれば良いのですが,無理ならこのままで構わない

・ダイアログの入力を受け取っている場所
ザッと見た感じ,Dissolve.hヘッダのParameters構造体に,percentやdispositionと言う文字列があるので,これを使っているのだと予想

この3つの変数に値が来ていた
gParams->disposition:Dispositionの選択。上から0,1,2,3でした
gParams->percent:Amount%の数値
gParams->ignoreSelection:範囲選択時にEntire imageチェックしたらtrue

・入力によってプログラムを組む
例のごとくDissolveRectangle関数を触ります
				if (depth == 32)
					*fPixel = fColor;
				else if (depth == 16)
					*bigPixel = bigColor;
				else {
					if(gParams->disposition == 0){
						//全部ディザリング
						if(0xff < (int)*pixel + (int)amari[color]){
							*pixel = 0xff;
						}else if((int)*pixel + (int)amari[color] < 0){
							*pixel = 0x00;
						}else{
							*pixel = *pixel + amari[color];
						}
					}else{
						//閾値ディザリング
						uint8 savecolor=*pixel;
						if(-gParams->percent < (int)*pixel - (int)oldcolor[color] && (int)*pixel - (int)oldcolor[color] < gParams->percent){
							//閾値内の時は余りを足さない
						}else{
							if(0xff < (int)*pixel + (int)amari[color]){
								*pixel = 0xff;
							}else if((int)*pixel + (int)amari[color] < 0){
								*pixel = 0x00;
							}else{
								*pixel = *pixel + amari[color];
							}
						}
						oldcolor[color]=savecolor;
					}

					if(*pixel & 0x08){
						amari[color] = -0x0f + (*pixel & 0x0f);
						*pixel = *pixel | 0x0f;
					}else{
						amari[color] = *pixel & 0x0f;
						*pixel = *pixel & 0xf0;
					}
				}
こんな感じでしょうか('-'*)

・ダイアログ上の文字は変えられないか?
恐らくリソース定義だと思うので,.rcファイルを探してみる
winフォルダにDissolve.rcがありました
    RTEXT           "&Amount %:",4,60,6,38,8,NOT WS_GROUP
    RTEXT           "Disposition:",6,61,24,36,8,NOT WS_GROUP
    RADIOBUTTON     "Cl&ear",7,100,24,35,8,BS_NOTIFY | WS_GROUP | WS_TABSTOP
    RADIOBUTTON     "Coo&l",8,100,34,35,8,BS_NOTIFY | WS_GROUP | WS_TABSTOP
    RADIOBUTTON     "&Hot",9,100,44,35,8,BS_NOTIFY | WS_GROUP | WS_TABSTOP
    RADIOBUTTON     "&Sick",10,100,55,35,8,BS_NOTIFY | WS_GROUP | WS_TABSTOP
↓書き換える
    RTEXT           "Sikii:",4,60,6,38,8,NOT WS_GROUP
    RTEXT           "Dithering:",6,61,24,36,8,NOT WS_GROUP
    RADIOBUTTON     "All",7,100,24,35,8,BS_NOTIFY | WS_GROUP | WS_TABSTOP
    RADIOBUTTON     "Use sikii",8,100,34,35,8,BS_NOTIFY | WS_GROUP | WS_TABSTOP
余計なRADIOBUTTONを削除すると,表示されなくなります



TOPプログラマ専用Photoshopプラグイン開発

Melonbooks DL