StretchBlt HALFTONE == BILINEAR 是否适用于所有缩放?

2023-11-22

谁能澄清一下 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(使用前将#替换为@)

StretchBlt HALFTONE == BILINEAR 是否适用于所有缩放? 的相关文章

  • 通过 PowerShell 运行 .cmd 文件

    我正在尝试使用 PowerShell 在远程服务器上运行 cmd 文件 在我的 ps1 脚本中我尝试过 C MyDirectory MyCommand cmd 它会导致此错误 C MyDirectory MyCommand cmd is n
  • MFC 中位图背景绘制的线程类型

    我有一个 MFC 文档 视图 C 图形应用程序 它将所有绘图都绘制到离屏位图 然后将其复制到 OnDraw 方法中提供的 CDC 指针 在过去的几天里 我一直在寻找将绘图组件放置在单独的工作线程中 这样它就不会停止 GUI 当我执行此操作时
  • 如何在拥有句柄时检查给定进程是否正在运行

    我在用ShellExecuteEx启动应用程序 成功开始阅读后TShellExecuteInfo hProcess获取已启动进程的句柄 我想定期检查我的应用程序启动的进程是否仍在运行 两个或多个同名进程可以同时运行 我想确保我的应用程序正在
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 如何为 Windows toast 注册协议?

    如何注册 Windows toast 协议 样本中来自https blogs msdn microsoft com tiles and toasts 2015 07 02 adaptive and interactive toast not
  • 使用 Windows 套接字的 WriteFile 返回无效参数错误

    我已经在 Windows 套接字上苦苦挣扎了两天 无法像在 Linux 中那样只使用写入套接字 我想编写自己的 shellcode 并且正在研究如何将 stdout stdin 重定向到套接字句柄 这就是我的演奏的来源 如果有必要 我使用
  • 当用户尝试打开新实例时返回到已打开的应用程序

    这是我有一段时间想不通的问题 防止第二个实例很简单并且有很多方法 但是恢复已经运行的进程则不然 我想 最小化 撤消最小化并将正在运行的实例置于最前面 在其他窗口后面 将应用程序置于最前面 我使用的语言是 VB NET 和 C 我发现这段代码
  • 适用于 Windows 的 php-fpm?

    PHP FPM 的主页http php fpm org http php fpm org 声明它是 PHP 5 3 3 以来 PHP 的一部分 现在 我想知道 当我从 php net 下载最新的 PHP 二进制文件时 其中没有 php fp
  • 具有类型推断功能的 Lisp 静态类型方言,适用于 Windows?

    是否有静态类型的 Lisp 方言可以执行类型推断并与 Windows 兼容 我找到了 CMUCL 但它似乎没有 Windows 兼容版本 看一下SBCL http www sbcl org它源自 CMUCL 它通过类型声明对静态类型提供良好
  • _CrtCheckMemory使用示例

    我试图了解如何使用 CrtCheckMemory追踪我正在开发的 Windows 应用程序中的堆损坏 我似乎无法让它返回false 这是我的测试代码 int test new int 1 for int i 0 i lt 100 i tes
  • 使用特定的 JRE 运行 JAR 文件

    在 Windows 上有没有办法使用位于特定文件夹中的 JRE 运行 JAR 文件 类似于 Eclipse 在您提供给它的某个路径中查找其 JRE 的方式 一些 Windows 可执行代码 C 或 C 或批处理文件都可以完成这项工作 谢谢
  • 查找所有 DHCP 和 DNS 服务器

    我有一位客户要求我找到他所有的 Dhcp 和 DNS 服务器以及一些附加信息 例如 DC 服务器和操作系统 所以我决定尝试提高我的 powershell 技能 但我对此还很陌生 所以我写了这个脚本 但我想仍然缺少一些东西 因为它不起作用 编
  • 在 Python 中静默打印 PDF

    我正在尝试使用 Python 打印 PDF 而不打开 PDF 查看器应用程序 Adobe Foxit 等 我还需要知道打印何时完成 以删除文件 Here http permalink gmane org gmane comp python
  • 使用 Rust 构建的 DLL 在运行时是否需要 libgcc.dll?

    如果我构建一个 DLLRust 语言 http rust lang org 是否需要libgcc dll在运行时出现 一方面 我在互联网上的某个地方看到过一个帖子 声称是的 rustc exe has libgcc s dw2 1 dll在
  • 当系统上没有留下任何可执行文件时,如何卸载 Windows 服务?

    当系统上没有留下任何可执行文件时 如何卸载 Windows 服务 我跑不了installutil u因为系统上没有留下可执行文件 我仍然可以在服务控制台中看到该服务的条目 出现这种状态的原因可能是因为 msi 包中存在问题 没有正确删除服务
  • GDI+、JPEG 图像到 MemoryStream 中发生一般错误

    这似乎是整个网络上一个臭名昭著的错误 以至于我无法找到问题的答案 因为我的场景不适合 当我将图像保存到流中时 会引发异常 奇怪的是 这对于 png 来说效果很好 但是对于 jpg 和 gif 却给出了上述错误 这是相当令人困惑的 大多数类似
  • Chromium 中的 MP4 编解码器支持

    我们已将 Chromium 嵌入式框架集成到我们的 Windows 游戏中 以允许我们从应用程序内渲染网页 并且一切正常 除了 MP4 视频 据我所知 由于许可问题 Chromium 不包含此编解码器 但任何人都可以提供有关我们如何添加支持
  • 为什么这个 gif 的持续时间似乎是 0 毫秒?如何找到真实的持续时间?

    我正在尝试从动画 gif 文件中获取持续时间和帧数 以便计算 gif 的平均帧速率 然后将其转换为视频 我最近在测试过程中看到了这张图片 它似乎让一切都相信它的持续时间为 0 毫秒 为什么 如何找到真实的持续时间 到目前为止我已经尝试过 e
  • 为什么某些安装程序需要在运行程序之前重新启动计算机?

    我对部署桌面应用程序相当陌生 所以这是我第一次为我的软件构建安装程序 目前 我安装软件后第一次运行它时 它崩溃了 之后 它运行良好 我仍在调试此问题 但我注意到在安装后和运行软件之前立即重新启动似乎可以修复此崩溃 某些安装程序要求您在运行软
  • Windows 10:任务栏中的图标大小错误

    从 Windows 10 开始 任务栏中的图标大小似乎为 24x24px 如果 Windows 选择图标文件中的 24px 版本进行显示 那么这不会有问题 但它选择了 32px 版本并将其缩小 这会导致丑陋的伪像 尤其是当你的图标中有直线时

随机推荐

  • java.lang.IllegalArgumentException:spring + hibernate中需要'sessionFactory'或'hibernateTemplate'

    我正在做 spring hibernate 应用程序 当我在 tomcat 服务器上运行应用程序时 出现一些异常 下面是我的代码 这是我的 bean 配置文件
  • 如何在Delphi FireMonkey中调整按钮大小以适合文本?

    我希望按钮尺寸 宽度和高度 尽可能小 但我希望它适合文本 有代码示例吗 Delphi XE4 FireMonkey 移动应用程序 FireMonkey 通过使用的方法呈现文本文本布局 class 我们可以通过类助手访问此方法 然后根据布局提
  • 使用 PHP 发送 Firebase 通知

    每个人 我在使用 PHP 发送 FIRebase 通知时遇到问题 当我从 Firebase 控制台发送它时 我收到通知 但是当我从 PHP 发送它时 我没有收到任何通知 你知道问题出在哪里吗 这是我的 PHP 代码
  • 谷歌选择器和后端文件下载

    我在我的网络应用程序中使用谷歌选择器来允许用户从他的谷歌驱动器中浏览和选择文件 一旦他做出选择 选择器就会返回有关所选文件的各种数据 包括文件 ID 和 URL 我的目标是将选定的文件下载到服务器 如果我将 URL 传递给后端脚本 它将无法
  • mongodb 在更新中设置 null

    我必须交换文档的值 var query id ObjectId 53e1c254382f891cc600076d db properties find query forEach function prop printjson id pro
  • 使用 cte 创建 while 循环

    如何从 while 循环创建 sql server cte我的循环是这样的 declare ind as int declare code as nvarchar set ind 0 while ind lt 884 begin selec
  • 无法使用 ftplib 列出 FTP 目录 – 但 FTP 客户端可以工作

    我正在尝试连接到 FTP 但无法运行任何命令 ftp server ip ftp username username ftp password password ftp ftplib FTP ftp server ftp login ftp
  • 从批处理文件中重定向输出

    我正在使用一些简单的命令创建一个批处理文件来从系统收集信息 批处理文件包含获取时间 IP 信息 用户等的命令 我将所有命令组装在一个批处理文件中 然后运行 但我希望批处理文件在运行时将结果输出到文本文件 日志 是否有一个命令可以添加到批处理
  • Selenium:尝试获取 Firefox 控制台日志会导致“WebDriverError:不允许 HTTP 方法”

    我试图在我的 selenium 测试中捕获控制台错误 具有 selenium webdriver 4 0 0 alpha 5 和最新的 geckodriver 和 chromedriver 的节点环境 我已经为 Firefox 设置了一个驱
  • 查找每行特定值最近出现的时间

    假设我有一个数据表 dt lt data table datetime seq as POSIXct 2016 01 01 00 00 00 as POSIXct 2016 01 01 10 00 00 by 1 hour ObType c
  • Codeigniter CSRF 令牌问题

    我制作了一个简单的注册 新闻通讯网站 但我遇到了一个奇怪的问题 有些人会收到这样的错误 操作遇到错误 您所提出的要求是不允许的 我已经尝试过google 发现当CSRF设置为true时人们也遇到同样的问题 然而 并不是每个人都会发生这种情况
  • 表格列的对齐方式

    我正在尝试将表放在表内 这意味着嵌套表 现在它看起来像这样截屏 但我需要从左对齐 因为我在每行中使用相同的计数列 您可以看到我为获得此输出所做的尝试 提前致谢 report table border collapse collapse wi
  • reinterpret_cast 到函数指针

    这是我为实验编写的代码reinterpret cast
  • 如何在横向模式和纵向模式之间使用 2 种不同的背景

    我有一个 Android 应用程序 我想知道是否可以为横向和纵向模式提供 1 个布局 1 个布局 xml 文件 但我想要每种模式都有不同的背景 那可能吗 我需要 2 个 xml 文件指向不同的背景图像吗 或者我可以使用 1 个 xml 文件
  • iPad Safari IOS 5 window.close() 关闭错误的窗口

    我们有一个 iPad 应用程序可以在我们的旧款 iPad 上运行 我们使用以下方式打开外部链接 var x window open url 一天结束时 当用户关闭应用程序的这一部分时 我们会检查它打开的所有窗口 并对每个窗口执行 x clo
  • 计算 Postgres 中最近的工作日

    我需要根据订单请求的交货日期在 postgres 查询中安排一些项目 例如 订单要求在星期一交货 例如 20120319 并且订单需要在前一个工作日 20120316 准备 想到最直接的方法 我愿意添加日期表 我认为必须有一种比使用一长串
  • R 中的 ImageMagick

    我想在 R 中使用 ImageMagick 但 R 不允许我安装它 install packages ImageMagick Installing package into C Users FSFH 2 Documents R win li
  • Raku 在编译时执行哪些类型检查?未来这种情况会改变吗?

    目前 截至 2020 年 8 月 Rakudo 不会在编译时对函数的返回值进行类型检查 也就是说 它不提供函数满足其返回约束的静态保证 具体来说 以下两个函数都编译为 Raku sub get int gt Int bug sub get
  • 如何对 UTF-8 字符串数组进行排序?

    我目前不知道如何在 PHP 中对包含 UTF 8 编码字符串的数组进行排序 该数组来自 LDAP 服务器 因此通过数据库排序 没问题 不是解决方案 以下内容在我的 Windows 开发机器上不起作用 尽管我认为这至少应该是一个可能的解决方案
  • StretchBlt HALFTONE == BILINEAR 是否适用于所有缩放?

    谁能澄清一下 GDI 是否拉伸Blt工作站 Win32 API 的函数执行双线性插值以缩放both24 32 位彩色图像的更大和更小图像 如果没有 是否有 GDI notGDI 函数执行此操作吗 The 设置拉伸Blt模式fn 有一个设置H