{
//直接操作缓存
char *buffer;
int x, y;
const
GBVisualButton * pVisualButton =0;
int layer_width;
int
row_width_in_byte;
gdi_layer_struct* next_layer;
U32
src_byte_per_pixel;
gdi_handle CurLayer;
pVisualButton =
bt;
gdi_layer_get_active ( &CurLayer );
gdi_layer_get_buffer_ptr
( (U8 **)&buffer );
next_layer =
(gdi_layer_struct*)CurLayer;
src_byte_per_pixel =
next_layer->bits_per_pixel / 8;
row_width_in_byte = bt->comprect.w *
src_byte_per_pixel;
for ( y = GET_BUTTON_RECT_Y(pLayout, bt); y <
GET_BUTTON_RECT_Y(pLayout, bt)+bt->comprect.h - 1; y++ )
{
char
* pRow = &buffer[(y * next_layer->width + GET_BUTTON_RECT_X(pLayout,
bt))* src_byte_per_pixel];
char * pRowEnd = pRow +
row_width_in_byte;
for(; pRow < pRowEnd;
pRow++)
{
*pRow = ~(*pRow);
// if (pLayout ==
&s_HWLayout)
// *pRow = ~(*pRow);
}
// for ( x = GET_BUTTON_RECT_X(pLayout, bt); x <
GET_BUTTON_RECT_X(pLayout, bt)+bt->comprect.w - 1; x++ )
// {
//
buffer[(y * next_layer->width + x)* src_byte_per_pixel] = ~buffer[(y *
next_layer->width + x)* src_byte_per_pixel];
// buffer[(y *
next_layer->width + x)* src_byte_per_pixel + 1] = ~buffer[(y *
next_layer->width + x)* src_byte_per_pixel + 1];
// }
InvertActiveLayer();
}
}
本文介绍了一种直接操作缓存的方法,通过修改缓存中的像素值来实现按钮的显示效果反转。具体步骤包括获取缓存指针、计算每个像素的字节宽度以及每一行的字节数等。

5042

被折叠的 条评论
为什么被折叠?



