我用GDI+绘制透明图片时发现这个问题:
下面是我绘图的函数:
graphics->DrawImage(bitmap,src_rect,bmp_rect.X,bmp_rect.Y,
real_rect.Width,real_rect.Height,UnitPixel,&imageAtt);
当我没有调整imageAtt的属性时,CPU占用2%至5%;
当我调整imageAtt的属性改变图片的透明度时,CPU占用达到40%至50%;
这是什么原因?
下面是我绘图的函数:
graphics->DrawImage(bitmap,src_rect,bmp_rect.X,bmp_rect.Y,
real_rect.Width,real_rect.Height,UnitPixel,&imageAtt);
当我没有调整imageAtt的属性时,CPU占用2%至5%;
当我调整imageAtt的属性改变图片的透明度时,CPU占用达到40%至50%;
这是什么原因?
解决方案 »
- 获得了CEdit的句柄,怎么通过这个句柄获取CEdit里面的内容(数据)?
- 关于Httptunnel与Web Server共同监听80端口的问题
- 有人把OpenProcess加了钩子,不让其他程序打开它的句柄,我们如何才能突破限制呢
- EditView中设置字体怎么不成功
- 我用VC写了一个动态库,在delphi中调用请问我怎么在调用是调试动态库.急急急急急急急
- 【求助】怎样从DLL里创建CFormView子类并显示出来?
- 怎样延迟时间2毫秒后再运行程序?
- 如何解决链接时出现的“unresolved external symbol ”种错误?谢谢
- 求助: WIN7+VS2008对话框按扭样式不符
- vc 中如何绘制如同visio中的组织框架图
- 视频文件时间大小
- 如何建立文件夹?
以前用GDI+时也遇到过类似的问题
GDI+虽然抽象层次更高,更易用,但是效率不是一般的低。特别是使用了ImageAttribute作为参数进行绘制的时候,那速度简直惨不忍睹。一个简单的全局Alpha混合,使用GDI+设置ImageAttribute的ColorMatrix之后,速度比GDI的AlphaBlend慢差不多500倍。
而DirectX还得从头学起饿..........
GDI也可以处理透明的,不过不是很完善而已。
GDI提供AlphaBlend函数,可以实现对图像的全局半透明混合,以及32位带Alpha通道的BMP图像的绘制。
如果只是纯透明的话更简单,TransparentBlt即可。