Мне нужно сделать прозрачность, имея 2 пикселя:
pixel1: {A, R, G, B} - foreground pixel<br>
pixel2: {A, R, G, B} - background pixel
A, R, G, B - байтовые значения
каждый цвет представлен байтовым значением
Теперь я вычисляю прозрачность как:
newR = pixel2_R * alpha / 255 + pixel1_R * (255 - alpha) / 255<br>
newG = pixel2_G * alpha / 255 + pixel1_G * (255 - alpha) / 255<br>
newB = pixel2_B * alpha / 255 + pixel1_B * (255 - alpha) / 255
но это слишком медленно
Мне нужно сделать это с помощью побитовых операторов ( И, ИЛИ, XOR, ОТРИЦАНИЕ, БИТ ДВИЖЕНИЯ )
Я хочу сделать это на Windows Phone 7 XNA
--- прикрепленный код C # ---
public static uint GetPixelForOpacity(uint reduceOpacityLevel, uint pixelBackground, uint pixelForeground, uint pixelCanvasAlpha)
{
byte surfaceR = (byte)((pixelForeground & 0x00FF0000) >> 16);
byte surfaceG = (byte)((pixelForeground & 0x0000FF00) >> 8);
byte surfaceB = (byte)((pixelForeground & 0x000000FF));
byte sourceR = (byte)((pixelBackground & 0x00FF0000) >> 16);
byte sourceG = (byte)((pixelBackground & 0x0000FF00) >> 8);
byte sourceB = (byte)((pixelBackground & 0x000000FF));
uint newR = sourceR * pixelCanvasAlpha / 256 + surfaceR * (255 - pixelCanvasAlpha) / 256;
uint newG = sourceG * pixelCanvasAlpha / 256 + surfaceG * (255 - pixelCanvasAlpha) / 256;
uint newB = sourceB * pixelCanvasAlpha / 256 + surfaceB * (255 - pixelCanvasAlpha) / 256;
return (uint)255 << 24 | newR << 16 | newG << 8 | newB;
}