0

我不完全是 Windows 编程专家 ;) 如果这个问题是微不足道的,请原谅。

我有一个要在其上显示位图的窗口。位图可以拉伸以跨越整个区域,也可以以原始纵横比显示,空白区域将用实心画笔填充。

我使用 LoadImage 加载位图并使用 BitBlt 显示它。我在 WM_ERASEBKGND 上执行此操作,我使用来自 wparam 的 DC,它是一个 mem DC。

当需要拉伸位图时,我正在考虑使用 StretchBlt 而不是 BitBlt。

所以我的问题是:

  • 可以将位图存储为 HBITMAP 还是应该使用 DIBSection?哪一个在性能方面更好,这两种解决方案的内存占用是多少?

  • 在 WM_ERASEBKGND 上绘制到 DC 时,我应该始终拉伸位图,还是应该使用预先计算的拉伸位图创建兼容的 DC(或位图),然后将其 BitBlt 到目标 DC?

  • 如果我创建一个预先计算的位图,我应该立即卸载原始位图以节省内存吗?

  • 我应该使用 BitBlt/StretchBlt 还是 CopyImage?

  • 我读到我也可以使用具有所需宽度和高度参数的 LoadImage,以便加载的图像已经被拉伸,这个解决方案更好吗?

对于一些代码示例,我将不胜感激。

编辑:

也欢迎 GDI+ 解决方案。我对这个问题的最佳、最简单和最佳性能的解决方案感兴趣。

4

0 回答 0