如何在不丢失颜色键信息的情况下缩放精灵图像?

时间:2010-04-02 15:30:30

标签: c++ windows-mobile image animation directdraw

我目前正在开发一个显示地图并在其上绘制一些标记的简单应用程序。我正在为Windows Mobile开发,所以我决定使用DirectDraw和Imaging接口来快速而漂亮地运行应用程序。当用户在触摸屏上移动手指时,地图会移动,因此整个地图移动/滚动动画必须快速,但事实并非如此。

在每个地图更新中,我必须绘制地图的一部分,控制按钮和标记 - 按钮和标记作为mipmap预装在DirectDraw表面上。所以我唯一能做的就是BitBlit从mipmap到后台缓冲区,从后台缓冲区到主表面(由于我的应用程序的窗口模式,我无法使用页面翻转)。

之前我使用了32位ARGB像素格式的预乘alpha表面用于图像mipmap,一切看起来都不错,但绘制整个“场景”非常慢 - 我可以忘记平滑的地图滚动。现在我使用带有原生(RGB565)像素格式和紫红色(0xFF00FF)颜色键的mipmap。绘图要好得多。

我的mipmap表面是在程序加载时生成的 - 图像从文件加载,缩放(使用过滤)并在mipmap上绘制。问题是,图像缩放处理混合了像素颜色,并且在精灵区域的边界上的那些像素与周围的紫红色像素混合,从而产生未被视为颜色键的半紫红色。当我使用颜色键选项进行blitting时,sprite有类似紫红色的小边框,看起来非常糟糕。

如何解决这个问题?我可以使用alpha blitting,但速度太慢 - 即使是ARGB 1555格式也是如此。

0 个答案:

没有答案