アルファ矩形
こいつは線形補間テーブルさえあれば、アルファブレンドと同じ方法で求められます。
void RectangleAlpha( word* dst , // 転送先 int dx , // 転送する X 座標 int dy , // 転送する Y 座標 int dw , // 転送する広さ int dh , // 転送する高さ int dp , // 転送先の pitch uint16 color , // 描画色(RGB565) int alpha // アルファ値(0〜31) ){ byte* tbl = _pTable; if( tbl == null ) return; dst = (word*)((byte*)dst + dx * sizeof( word ) + dy * dp ); uint16 sr = ((color >> 6) & 0x03e0); uint16 sg = ((color >> 1) & 0x03e0); uint16 sb = ((color << 5) & 0x03e0); alpha <<= 10; uint32 alpha_sr = alpha | sr; uint32 alpha_sg = alpha | sg; uint32 alpha_sb = alpha | sb; int y,x; for( y = 0 ; y < dh ; y++ ){ for( x = 0 ; x < dw ; x++ ){ uint16& d = *(uint16*)&dst[ x ]; d = (tbl[ alpha_sr | ((d >> 11) ) ] << 11) | (tbl[ alpha_sg | ((d >> 6) & 0x001f) ] << 6) | (tbl[ alpha_sb | ((d ) & 0x001f) ] << 0); } dst = (word*)((byte*)dst + dp); } }
転送元とアルファ値をあらかじめ計算して転送出来るので、アルファブレンド転送よりは速いはず。