当IDirectDrawSurface7 :: Blt方法的源曲面和目标曲面具有不同的大小时,使用哪种拉伸方法?显然,当目标矩形小于源时,我们可以通过各种方法计算目标像素颜色 - 随机选择一个相邻像素,计算相邻像素的算术平均值或加权算术平均值。当目标矩形大于源时,我们可以使用线性插值,双三次插值,lanczos方法。调用Blt方法时如何影响输出质量?它的源和目的地的理想选择具有相同的尺寸但有时不可能。例如,在进行2D图形处理时,我只在一个支持的屏幕分辨率上将png图像放在磁盘上。
答案 0 :(得分:1)
当源矩形和目标矩形的大小不同时,Blt是否进行任何过滤取决于硬件。使用什么算法(如果有的话)取决于硬件。尽管您可以请求在Y方向上过滤输出,但几乎无法控制发生的情况。
从2000年7月的Platform SDK DirectX文档“Blitting with Blt”主题:
扩展的硬件加速取决于设备的DDCAPS结构的dwFXCaps成员中的DDFXCAPS_BLT *标志。例如,如果某个设备具有DDFXCAPS_BLTSTRETCHXN功能但不具有DDFXCAPS_BLTSTRETCHX,则当源矩形的x轴乘以整数时,它可以提供帮助,但在进行非整数(任意)缩放时则不行。
设备也可能支持算术缩放,即通过插值而不是像素的简单乘法或删除来缩放。例如,如果一个轴增加了三分之一,则像素将重新着色,以提供比原始图像更接近的值,而不是通过该轴上每三个像素加倍所产生的。
除了在传递给Blt的DDBLTFX结构的dwDDFX成员中设置DDBLTFX_ARITHSTRETCHY标志外,应用程序无法控制驱动程序完成的缩放类型。该标志请求在y轴上进行算术拉伸。 DirectDraw API当前不支持x轴上的算术拉伸和算术收缩,但驱动程序可以默认执行它们。
如果您想要更好地控制缩放的执行方式,您必须自己进行缩放,或者使用Direct3D。