前段时间研究位图的放大,对StretchBlt的模式做了分析,其中主要比较的是默认模式和清晰度比较高的HALFTONE模式。
为了进行图形缩放的时候得到质量较高的图形,HALFTONE模式被采用,但HALFTONE模式是将源矩形区中的像素映射到目标矩形区的像素块中,覆盖目标像素块的一般颜色与源像素的颜色接近,因此其运算量比较大,而且在设置为该模式以后需要设置刷子的源点。
下面对使用默认模式和HALFTONE模式进行一个测试得到数据,测试图形大小为:507*612
放大两倍的测量如数:
StretchBlt Mode |
Time(ms) |
Picture Quality | |||
1 |
2 |
3 |
AVG | ||
HALFTONE |
25.3 |
25.4 |
25.7 |
25.5 |
HIGH |
DEFAULT |
3.1 |
3.1 |
3.1 |
3.1 |
HIGH |
两个时间比为:AVG1/AVG2 =25.5/3.1 = 8.22
缩小两倍的测量数据为:
StretchBlt Mode |
Time(ms) |
Picture Quality | |||
1 |
2 |
3 |
AVG | ||
HALFTONE |
10.492 |
10.531 |
10.468 |
10.497 |
HIGH |
DEFAULT |
1.495 |
1.457 |
1.477 |
1.48 |
LOW |
两个时间比为:AVG1/AVG2 =10.497/1.48=7.1
我们可以看到使用HALFTONE进行缩放图形所使用的时间大约是默认模式的7到8倍之多,但在进行放大的时候得到的图形质量基本上没有什么区别,但在缩小的时候就有明显的区别,所以为了提高程序的性能,可以在放大的时候考虑不使用HALFTONE模式,而在缩小的时候使用HALFTONE模式,这样可以保证我们的程序跑的更快。
注意一个问题:这里没有对图形进行无限的放大测量,如果放大到10倍以上图形质量时候会影响还需要注意。