如何使用 LoadImage 和 StretchDIBits 绘制 PNG 图像?

2024-01-03

(这与问题有关如何使用 Win32/GDI 加载 PNG 图像(如果可能,不要使用 GDI+)? https://stackoverflow.com/questions/4567875/how-would-i-load-a-png-image-using-win32-gdi-no-gdi-if-possible.)

Hi all,

我想知道,假设您有一个 PNG 资源嵌入到带有 ID 的二进制文件中IDB_PNG1, 和LPDRAWITEMSTRUCT吸引(所以这意味着你有HDC以及目标的矩形),如何使用该图像将该图像绘制到屏幕上StretchDIBits?我曾与BitBlt and TransparentBlt之前,但是StretchDIBits似乎工作方式不同,并且LoadImage似乎不适用于 PNG。

谢谢你!

(注意:我使用的语言是 C++,但这并不是太重要......C、C#、Visual Basic 等都可以;我只是想弄清楚步骤,而不是所需的确切代码。)


我写了一个博客文章 https://faithlife.codes/blog/2008/09/displaying_a_splash_screen_with_c_part_i/(使用 C++ 显示启动屏幕)包含完整的代码示例,该示例从资源加载 PNG 并将其转换为 HBITMAP(使用WIC http://msdn.microsoft.com/en-us/library/ee719902(v=VS.85).aspx)。然后,您可以使用 CreateCompatibleDC、SelectObject 和 BitBlt 将其显示在目标 HDC 中。

虽然我从未尝试过,但如果将资源中的原始字节加载到内存中,并设置具有宽度、高度等的 BITMAPINFOHEADER 结构,则应该能够使用 StretchDIBits 直接显示 PNG,如中所示这MSDN样本 http://msdn.microsoft.com/en-us/library/dd145107(v=VS.85).aspx.

C# 和 VB.NET 解决方案将非常不同,因为您可以使用 System.Drawing(GDI+ 的包装器)或 System.Windows.Media.Imaging(在 WPF 应用程序中)来处理图像加载和绘制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 LoadImage 和 StretchDIBits 绘制 PNG 图像? 的相关文章

  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 在 GCC 和 Clang 下,使用 lambda 的简单 RAII 包装器的复制初始化意外失败

    我在创建一个简单的 RAII 包装器时遇到了一个意想不到的问题 更不用说下面代码的逻辑不完整性了 复制构造函数和赋值运算符未删除等 这意味着是一个SSCCE 令我印象深刻的是复制初始化我的包装器与临时 lambda 的结果会导致编译错误 而
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 不要声明只读可变引用类型 - 为什么不呢?

    我一直在阅读这个问题 https stackoverflow com questions 2274412 immutable readonly reference types fxcop violation do not declare r
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E

随机推荐

  • 访问被拒绝上传到 s3

    我尝试上传到 s3 当我看到 s3 存储桶日志中的日志时 内容如下 mybucket me 17 Oct 2013 08 18 57 0000 120 28 112 39 arn aws sts 778671367984 federated
  • 如何观察DbSet的Add动作?

    我有两个名为Contact and ContactField如下 当 的时候ContactField被添加到Contact 我希望分配SortOrder to ContactField自动地 是否需要继承DbSet并自定义Add方法 如何实
  • 如何读取 gekko 错误代码(例如位置:5、v3 等)

    我在 位置 5 中遇到语法错误 我无法找到错误的根源 因为不知道 位置 5 指示的位置 如何通过读取错误代码来识别原始代码中有问题的行 还有 v3 是什么意思 错误代码 Exception error Model Expression Er
  • JSON 序列化列表>

    我在 Web API 项目中使用了字典 它的序列化类似于 JSON 中的序列化 keyname objectvalue keyname2 由于我有重复的键 我无法再使用字典类型 现在我正在使用List
  • 无法从 MonoTouch 程序中表示崩溃日志

    我有一个 MonoTouch 应用程序 我在调试中构建并上传到设备 我在调试器中运行该应用程序 但该应用程序死了 而调试器没有捕获任何内容 我有一个 crash 日志 我跑 symbolicatecrash myapp crash myap
  • 单击按钮后更改 ImageView 源一段时间

    我有两个按钮和一个图像视图
  • 当声音在 AVAudioPlayer 中播放完毕时执行操作吗?

    我正在使用 AVAudioPlayer 框架 并且我有几种声音一次播放一种 当声音播放完毕后 我希望应用程序执行一些操作 我尝试使用audioPlayerDidFinishPlaying 在第一个声音结束时执行操作 但我无法将其用于第二个声
  • 如何在 Flutter 中将数据从 showmodalbottomsheet 传递到上一页

    我如何传递数据showmodalbottomsheet到上一页 下面是示例代码 我尝试过的是 当我单击它时 有一个按钮显示 modalbottomsheet 当我单击 完成 按钮时 它应该通过1值到上一页 我还添加了setState on
  • Twitter Bootstrap:减少编译时间

    我正在使用 Twitter Bootstrap 编写一个简单的应用程序 在我的主 HTML 文件中 有以下几行 所以每次刷新页面时 都会生成整个 css 每次大约需要 15 秒 所以等待页面加载是一件痛苦的事情 我尝试使用 SimpLESS
  • Omniauth-facebook 登录不起作用

    我克隆了Facebook 集成示例 https github com AnnieLee blog facebook 这个 repo 可以了解omniauth facebook 是如何工作的 我从我的 Facebook 应用程序设置了自己的
  • ios 模拟器在 xcode 6 中出现并带有 UDID

    当我从 xcode 6 选择模拟器时 我会得到多个选择模拟器的选项 但模拟器带有 UDID 请看下面的图片并请帮帮我 提前致谢 killall Xcode Kills all running Xcode processes sudo kil
  • 如何用Python编写下载进度指示器?

    我正在编写一个小应用程序来通过 http 下载文件 例如 所描述的here https stackoverflow com questions 22676 how do i download a file over http using p
  • Cucumber-jvm @after 与 Appium 驱动程序

    我在用着cucumber jvm 并努力在全球范围内实施 After应该执行的方法只有一次所有场景执行完成后 这 After方法应该退出appium驱动程序 现在 After钩子在之后执行each运行场景 这意味着每次都应该从头开始创建驱动
  • jQuery 上的 trigger('click') 和 click() 有什么区别

    我正在寻找这两者之间的性能差异 我在 SSE 中找不到关于这个主题的好的答案 一些例子会有很大帮助 如果你查看 jQuery 代码 你会发现所有click does 是执行trigger click jQuery each blur foc
  • 使用 scala 和 GAE 玩框架

    有谁知道如何让 Play 框架的 scala 版本在 Google App Engine 中运行 此时我只是尝试让默认应用程序运行 我正在使用带有 gae 1 4 和 scala 0 9 1 模块的 Play 1 2 2 我创建了一个默认应
  • 如何在特征值中转置张量

    我试图获得两个张量的矩阵乘积 其中一个张量应该在相乘之前转置 At B 到目前为止我发现的是没有任何转置和两个矩阵转置的矩阵乘积 我正在寻找一种方法 可以直接收缩两个张量并转置其中一个张量 或者在收缩一个张量之前转置一个张量 我发现 转置效
  • 使用 C# 通过数据库中存储的文件路径在 Crystal Reports 10 中显示图像

    我有一个 C Windows 应用程序 它将员工数据存储到 MYSQL 数据库中 包括他们的图片文件路径 192 168 13 6 IDPictures Unknown jpg 有人可以帮助我如何通过从数据库读取文件路径来显示 Crysta
  • php preg_replace 匹配字符串但仅替换其中的一部分

    我有这样的文字 Retailer ul Amazon foloseste metode severe pentru a si descuraja etc angajatii din depozite sa nu mai fure din p
  • 使用 SELECT 结果作为其他 SELECT 中的 COLUMN 名称

    是否可以使用选择的结果作为字符串与其他选择中列名中的另一个字符串连接 Example SELECT brand FROM articles a WHERE a id 12345678 结果 BRAND A 我现在想要连接 PRICE to
  • 如何使用 LoadImage 和 StretchDIBits 绘制 PNG 图像?

    这与问题有关如何使用 Win32 GDI 加载 PNG 图像 如果可能 不要使用 GDI https stackoverflow com questions 4567875 how would i load a png image usin