使用单色遮罩绘制图片得到正确结果
文章信息
- 详细描述
使用单色位图(每像素1bit)作为遮罩绘制透明图片,可能在S60第三版FP2手机上生成错误的结果。
- 如何重演
如果使用和手机屏幕(screen display mode,典型为EColor16MU)相同的色深载入或生成位图(CFbsBitmap),配合同样大小单色遮罩图片(显示模式为EGray2)。
使用遮罩绘制图片:
void CMyContainerControl::Draw( const TRect& aRect ) const
{
CWindowGc& gc = SystemGc();
TRect rect( Rect() );
gc.BitBltMasked(rect.iTl, iBitmapEColor16MU, rect, iMaskEGray2, EFalse);
}
在某些手机上,如Nokia N85,单色遮罩可能无法正确工作,而显示垂直条纹。
- 解决方案
当使用与父图片一致的色深时不会出现这个问题,但是和使用1-bpp单色图片比较这会显著耗费更多的RAM内存。
但反转单色遮罩图似乎能得到正确结果:
gc.BitBltMasked(rect.iTl, iBitmapEColor16MU, rect, iMaskEGray2, '''ETrue''');
作为单色位图的解决方案,每个遮罩都可以反转,只要绘制时将BitBltMasked()的第五个参数设置为ETrue.


(no comments yet)