谁能澄清一下 GDI 是否 拉伸Blt 工作站 Win32 API 的函数执行双线性插值以缩放 两个都 24/32 位彩色图像的更大和更小图像?如果没有,是否有 GDI(不是 GDI+) 函数执行此操作吗?

设置拉伸Blt模式 fn 有一个设置 半色调 记录如下:

半色调将源矩形中的像素映射到目标矩形中的像素块。目标像素块的平均颜色近似于源像素的颜色。

我见过 参考文献(参见第一个答案的后续内容) 当缩小图像时,这会执行双线性插值,但对于放大图像时会发生什么没有明确的答案。

我注意到 Windows Mobile CE SDK 确实支持 BILINEAR 标志 - 其记录与 HALFTONE 注释完全相反(仅适用于放大)。

请注意,对于这个问题的范围,我对追求 GDI+(它有许多插值选项)、OpenGL、DirectX 等不感兴趣。作为替代方案,因此请不要为这些其他 API 或备用图像库的后续操作而烦恼。

我真正希望找到的是一些明确的 MS/MSDN 或其他高质量文档,清楚地记录了 Win32(桌面)GDI 行为的这种行为。

同时,我将尝试一些比较 GDI 与 GDI 的实验。Direct2D(它确实有一个明确的标志来控制它)并发布我的发现。

谢谢!

有帮助吗?

解决方案

HALFTONE 模式基于在定义的正方形上改变转换阈值,在图像上执行非常块状的半色调抖动。我从未见过它被认为是最佳选择的情况。

COLORONCOLOR 是彩色图像的最佳模式,但正如您所见,它并没有给出很好的结果。

GDI 不支持双线性模式(除了您发现的 Windows Mobile CE 中)。双线性的简单实现在缩小图像时效果不佳,因为它只是尝试在两个相邻输入像素之间进行插值,而不尝试从更大的区域进行绘制。

其他提示

我一直在寻找到过去几个星期的同样的问题。

据我所知,有没有从微软这种行为存在任何明确的文档。

不过,我已经运行一些测试自己,尝试建立到StretchBlt可以信任相对于一贯执行程度上调和下调缩放半色调模式图像。

我的发现是:

1)StretchBlt确实产生足够的质量上和下缩放的图像。这可能是下面的Photoshop品质触摸,但可能确定最实用的目的。

2)这似乎取决于硬件加速,每当它的可用。我一直没能证实这一点,但我有一个轻微的恐惧,这可能导致对不同类型的硬件的不同的输出。然而,在5个或6个不同的系统,我试了一下,新与旧,性能是一贯的和快速的。

3)如果使用一个16位的彩色设备上的呼叫,或更低,StretchBlt将自动抖动图像。如果一个24位彩色设备上运行它,它也不会抖动。

4)如果使用它按比例的小图像(小于150x150px),它将随机回退到最近邻插值。这可以在自己的软件来弥补,通过缩放之前填充的位图,它做StretchBlt,然后事后取出填充。一个黑客的种类,但它工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top