在不创建新位图的情况下更改位图大小



我使用CreateDIBSection创建了一个位图,并指定了.biWidth = 100; .biHeight = 100 像这个伪代码:

pBitmapInfo->bmiHeader.biWidth = 100;
pBitmapInfo->bmiHeader.biHeight = 100;
....
CreateDIBSection(DibDC, pBitmapInfo, DIB_RGB_COLORS, 0, 0, 0);

稍后,我想重用此位图,只需将位图大小更改为 300x100(并且可能会清除旧图像,因为我不再需要它)。许多人说我需要创建一个具有新大小的新位图并删除旧位图。但我希望我们可以以某种方式重用旧的位图。我不想重新创建新的位图,因为它会导致性能降低,而我需要多次重复执行此操作。那么有没有办法在不重新创建新的位图的情况下更改位图大小呢?

如果您担心性能,那么继续销毁和创建位图确实不是一个好主意。

然而,有一个更简单的解决方案。只需创建预定义大小的位图池,并根据需要使用池中的位图。

如果您的 DC 寿命较长,则可以使用:

hBitmap100x100 = CreateCompatibleBitmap(MyDC, 100,100);
hBitmap300x300 = CreateCompatibleBitmap(MyDC, 300,300);

如果您不断更改 DC,请使用 DIB 部分

hBitmap100x100 = CreateDIBSection(DibDC, pBitmapInfo100x100, DIB_RGB_COLORS, null, 0, 0);
hBitmap300x300 = CreateDIBSection(DibDC, pBitmapInfo100x100, DIB_RGB_COLORS, null, 0, 0);
只要一遍

又一遍地重复使用这些。
如果您愿意,您甚至可以在一个数组中拥有十几个。
您可以在程序启动时创建它们,并在完成后处理它们。

最新更新