Nanashi-soft○プログラマ専用○Photoshopプラグイン開発○
if (depth == 32)
*fPixel = fColor;
else if (depth == 16)
*bigPixel = bigColor;
else {
*pixel = *pixel & 0xf0; //マスクが0xf8では無く0xf0
}
~略~
SetColor(gData->colorArray[1], 0, 0, 255, 0);
~略~
for(int a = 1; a < 4; a++){
ConvertRGBColorToMode(gFilterRecord->imageMode, gData->colorArray[a]);
}
CopyColor(gData->color, gData->colorArray[gParams->disposition]);
~略~
DissolveRectangle関数を呼ぶ直前に,そこから1つずつデータを取り出しています
↓サンプルソースのその部分
~略~
if(plane < expectedPlanes){
color = gData->color[plane];
}
DissolveRectangle(gFilterRecord->outData,
gFilterRecord->outRowBytes,
gFilterRecord->maskData,
gFilterRecord->maskRowBytes,
GetOutRect(),
color,
gFilterRecord->depth);
~略~
ですから,この plane変数が RGBAを示すものと推測できます~略~
color=(uint8)plane; //planeは0:R,1:G,2:B,3:Aと思われる
DissolveRectangle(gFilterRecord->outData,
~略~
本当にそうなのかを検証してみますif (depth == 32)
*fPixel = fColor;
else if (depth == 16)
*bigPixel = bigColor;
else {
if(color == 0){ //Rの時
*pixel=0xff;
}else{
*pixel=0x00; //それ以外の時
}
}
そうするとRだけがMAX状態になりましたstatic uint8 amari[4]={0,0,0,0}; //余りを保持する変数
前に捨てたデータを,次のドットに加算しますif (depth == 32)
*fPixel = fColor;
else if (depth == 16)
*bigPixel = bigColor;
else {
if(0xff < (int)*pixel + (int)amari[color]){
*pixel = 0xff; //255を越えた場合丸め込む
}else{
*pixel = *pixel + amari[color]; //前に捨てたデータを加算
}
amari[color] = *pixel & 0x0f; //捨てるデータを保持
*pixel = *pixel & 0xf0;
}