更改位图大小而不创建新的位图

时间:2016-04-22 12:04:57

标签: winapi bitmap

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

如果你有一个长寿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);

不要一遍又一遍地重复使用这些 如果你愿意,你甚至可以在阵列中打出十几个 您在程序启动时创建它们并在完成后处理它们。