前段时间研究位图的放大,对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倍以上图形质量时候会影响还需要注意。