首页 > 焦点 > 在S60中的图象处理需要注意的几点问题
在S60中的图象处理需要注意的几点问题
网上收集 2007/11/26 16:47:05 (193)
 
 
 

1:任何窗体内调用DrawNow来绘制的时候,如果这个窗体从没有用SetRect来设置过,则进行重绘时是没有任何效果的,通过调试发现Draw( )的CALLBACK方法里,系统给你传递的TRect是0,0,0,0,但第一次是可以的,因为从最上层传递过一个ApplicationRect

在用户自己写的绘图方法里,一般是这样的过程:

ActivateGc( );
CWindowGc& gc = SystemGc( );
....
DeactivateGc( );

//等同于下面的:
CWindowGc& gc = SystemGc( );
gc->Activate( *Window( ) );
gc->Deactivate( );

注意不要使用Window( )->BeginRedraw( )和Window( )->EndRedraw( );

2:关于双缓冲
需要使用的类:CFbsBitmap,CFbsBitmapDevice,CFbsBitmapGc
过程:

CFbsBitmap* pBuffer;
CFbsBitmapDevice* pDevice;
CFbsBitGc* pGc;

pBuffer = new( ELeave )CFbsBitmap;
CleanupStack::PushL( pBuffer )
pBuffer->Create( size,EColor4K );
pDevice = CFbsBitmapDevice::NewL( *pBuffer );
pDevice->CreateContext( pGc );

3:为什么我在框架体系内用BitBltMasked绘制透明图片时根本不透明,在透明区域显示的是灰色或其他颜色??
用BitBltMasked绘制的时候需要注意,遮罩图的透明部分是用画刷填充的。所以如果想要达到透明效果,必须:

gc.SetBrushStyle( CGraphicsContext::ENullBrush );

4:为什么用CMdaImageFileToBitmapUtility类来装载GIF动画时只能显示第一张??

其实CMdaImageFileToBitmapUtility在Open的方法里只解压GIF动画序列的第一张,此时你用FrameCount()返回的
是1,只有在成功的转化第一侦以后, FrameCount()才会返回2,这个时候才可以继续用ConvertL()来转化第二张

阅读(193) (责任编辑:城市网)
网页底部通用模块