谁能澄清一下 GDI 是否拉伸Blt工作站 Win32 API 的函数执行双线性插值以缩放both24/32 位彩色图像的更大和更小图像?如果没有,是否有 GDI(notGDI+) 函数执行此操作吗?
The 设置拉伸Blt模式fn 有一个设置HALFTONE记录如下:
HALFTONE将源矩形中的像素映射到目标矩形中的像素块。目标像素块的平均颜色近似于源像素的颜色。
我见过参考文献(参见第一个答案的后续内容)当缩小图像时,这会执行双线性插值,但对于放大图像时会发生什么没有明确的答案。
我注意到Windows Mobile CE SDK 确实支持 BILINEAR 标志- 其记录与 HALFTONE 注释完全相反(仅适用于放大)。
请注意,对于这个问题的范围,我对追求 GDI+(它有许多插值选项)、OpenGL、DirectX 等作为替代方案不感兴趣,所以请不要费心关注这些其他 API 或替代方案的后续内容图像库。
我真正希望找到的是一些明确的 MS/MSDN 或其他高质量文档,清楚地记录了 Win32(桌面)GDI 行为的这种行为。
同时,我将尝试一些比较 GDI 与 Direct2D(它确实有一个明确的标志来控制这一点)的实验,并发布我的发现。
Thanks!
过去几周我一直在研究同样的问题。
据我所知,微软没有关于此行为的任何明确文档。
不过,我自己运行了一些测试,试图确定 StretchBlt 在半色调模式下放大和缩小图像时的一致执行性能的可信程度。
我的发现是:
1) StretchBlt 确实能产生足够质量的放大和缩小图像。它的质量可能略低于 Photoshop,但对于大多数实际用途来说可能还可以。
2)它似乎依赖于硬件加速(只要可用)。我无法确认这一点,但我有点担心这可能会导致不同类型的硬件上出现不同的输出。然而,在我尝试过的 5 或 6 个不同的系统上,无论是新的还是旧的,性能都是一致且快速的。
3) 如果您在 16 位或更低的颜色设备上使用该调用,StretchBlt 将自动抖动您的图像。如果您在 24 位颜色设备上运行它,它不会抖动。
4)如果你用它来缩放小图像(小于150x150px),它会随机回落到最近邻插值。这可以在您自己的软件中解决,方法是在缩放之前填充位图,对其执行 StretchBlt,然后删除填充。有点像黑客,但它确实有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)