08/04/25 07:26:42
こういう時は
Y = (red * 19589+ green * 38444+ blue * 7503) / 0x10000;
か、
Y = (red * 77 + green * 150+ blue * 29)/ 256 ;
と2のベキにしたらどうかな /256 は >>8 に出来る
8bitにすれば rgbも8bitだから 16bitの入れ物で計算出来る
dstRGB[i] = (((Y * volume + red * (100 - volume)) / 100)<<16) +
(((Y * volume + green * (100 - volume)) / 100)<<8) +
((Y * volume + blue * (100 - volume)) / 100);
もvolumeを2のベキにして
Y*k + X*(1-k) = X+(Y-X)*k なので
dstRGB[i] = ((( red + (( (Y - red )*volume)>>8) )<<16) +
((( green+ (( (Y - green)*volume)>>8) )<<8) +
(( blue + (( (Y - blue )*volume)>>8) );
としたら掛け算は減らせるよ