- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
(这与 How would I load a PNG image using Win32/GDI (no GDI+ if possible)? 上的问题有关。)
大家好
我想知道,假设您有一个嵌入 ID IDB_PNG1
的二进制文件中的 PNG 资源,以及一个要绘制到其中的 LPDRAWITEMSTRUCT
(这意味着您有HDC
和目标矩形),如何使用 StretchDIBits
将该图像绘制到屏幕上?我之前使用过 BitBlt
和 TransparentBlt
,但是 StretchDIBits
似乎工作方式不同,而 LoadImage
没有似乎适用于 PNG。
谢谢!
(注意:我输入的语言是 C++,但这不太重要...C、C#、Visual Basic 等都可以;我只是想弄清楚步骤,而不是需要的确切代码.)
最佳答案
我写了一个blog post (在使用 C++ 显示初始屏幕时)包含完整的代码示例,该示例从资源加载 PNG 并将其转换为 HBITMAP(使用 WIC )。然后,您可以使用 CreateCompatibleDC、SelectObject 和 BitBlt 将其显示在目标 HDC 中。
虽然我从未尝试过,但如果您将原始字节从资源加载到内存中,并设置具有宽度、高度等的 BITMAPINFOHEADER 结构,您应该能够使用 StretchDIBits 直接显示 PNG。如本 MSDN sample 所示.
C# 和 VB.NET 解决方案会有很大不同,因为您可以使用 System.Drawing(GDI+ 的包装器)或 System.Windows.Media.Imaging(在 WPF 应用程序中)来处理图像加载和绘制。
关于c++ - 如何使用 LoadImage 和 StretchDIBits 绘制 PNG 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4568057/
我想在 32 位位图(或 Bitmap32)上传输 32 位图像(带 alpha channel 的 PNG)。 我不知道如何告诉函数混合图像而不是 bliting 它。就像使用 AlphaBlend
我正在使用 StretchDIBits 打印图像,但当图像由于某种未知原因处于特定尺寸时打印失败。 图像数据以 24 位 BGR 格式从其他一些图像源加载到一个无符号整数数组中。我已经验证图像和缓冲区
我正在使用 Win32Api,我正在寻找一种将 BGR(或 RGB、BGRA、RGBA...)数据加载到窗口的方法。 从左下角开始向上编织,就像这一段。 逐渐向下直到右下角结束,StretchDIBi
我正在使用 gdi c++,如果我绘制大图像(例如 7000*5000),StretchDIBits 函数有时会失败。它什么也没画。 GetLastError() 表示系统资源不足。任何人都可以解释为
玩 MFC,似乎在绘制 PixelFormat8bppIndexed 时出错了。 示例 PixelFormat8bppIndexed: 使用其他格式一切正常。 我认为问题出在: (*pBitmapIn
我想在 HDC 上绘制一个相同大小的 dib。我在用 :des 和 src 大小相同。 ::StretchDIBits(hdc, des.left,des.top
我正在使用 DrawImage 方法在图形对象上绘制位图图像,但是图像数量很多,因此绘制需要花费太多时间。我在这个论坛上读到,使用 StretchDIBits 可以减少绘图时间。 我通过调用 Draw
我的应用程序是在 Delphi 6 中开发的。由于后台处理和大量数据(消耗大约 60MB - 120MB 物理内存),这是一个资源密集型应用程序。该应用程序的功能之一是在进行某些处理后创建条形码图像。
我的应用程序是在 Delphi 6 中开发的。由于后台处理和大量数据(消耗大约 60MB - 120MB 物理内存),这是一个资源密集型应用程序。该应用程序的功能之一是创建条形码图像并打印它们。如果用
(这与 How would I load a PNG image using Win32/GDI (no GDI+ if possible)? 上的问题有关。) 大家好 我想知道,假设您有一个嵌入 I
我是一名优秀的程序员,十分优秀!