我们可以在 GDI 中为 bitblt 使用 png 而不是位图吗?

Posted

技术标签:

【中文标题】我们可以在 GDI 中为 bitblt 使用 png 而不是位图吗?【英文标题】:Can we use png instead bitmap in GDI for bitblt? 【发布时间】:2010-05-04 11:18:55 【问题描述】:
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = SelectObject(hdcMem, g_hbmBall);
GetObject(g_hbmBall, sizeof(bm), &bm);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);

我发现很多游戏都使用位图来显示动画。但是我们可以用 png 代替吗?

因为当我从 png ( 1kb -> 12kb in bitmap ) 转换时位图很大

感谢您阅读本文:)

【问题讨论】:

【参考方案1】:

不,您不能 BitBlt 使用 PNG。 BitBlt(顺便说一下,代表“位块传输”)非常快,但它基本上只是一个简单的内存复制例程。因此,BitBlt 除未压缩位图之外的任何图像格式的唯一方法是首先将该格式转换为位图。

顺便说一句,应用程序通常将位图用于动画,因为您不希望每次都解压缩精灵图像而增加整体帧渲染时间。位图只是一般将事物缓存在内存中以提高性能的一个示例。

【讨论】:

【参考方案2】:

不,我不这么认为,但 GDI+ 支持 PNG 以及其他几种格式。

【讨论】:

GDI+ 通过在打开 PNG 文件时将它们转换为位图来支持 PNG 文件,因此提问者仍然会面临他提到的大小问题。

以上是关于我们可以在 GDI 中为 bitblt 使用 png 而不是位图吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用增强型元文件 DC 作为源 DC 时出现 BItBlt 问题

BitBlt 仅捕获部分屏幕

bitblt 函数问题

如何加快 BitBlt 以使用 aero 捕获屏幕?

BitBlt 函数 详解2 附Demo

[VB].. BitBlt 的具体用法!!详细!!!