当我尝试使用GDI +的“DrawImage”功能将位图绘制到另一个位图时,我遇到了问题。 我的问题只出现在位图的大小相当大的情况下(在下面的代码中,我将大小变量替换为典型的非工作情况的实际值)。
问题是: DrawImage结果是“Out of Memory”(因此没有显示任何内容)。
这是代码(简化):
Bitmap* pclBitmapDest = new Bitmap(12821, 2400); // Creation and internal status is OK
Graphics* pclGraphicsDest = Graphics::FromImage(pclBitmapDest); // Creation and internal status is OK
Bitmap* pclBitmapSource = new Bitmap(12620, 2400); // Creation and internal status is OK
Graphics* pclGraphicsSource = Graphics::FromImage(pclBitmapSource); // Creation and internal status is OK
// ... Work on pclGraphicsSource to add some shapes into... Everything is OK.
ImageAttributes l_clImageAttributes;
clImageAttributes.SetColorKey(Color::White, Color::White, ColorAdjustTypeBitmap);
Rect stRectangleSource(200, 0, 12620, 2400);
// Add the "Source" bitmap to the "Dest" bitmap
pclGraphicsDest->DrawImage(pclBitmapSource, stRectangleSource, 0, 0, pclBitmapSource->GetWidth(), pclBitmapSource->GetHeight(), UnitPixel, &clImageAttributes); // lastResult=OutOfMemory (3)
我知道这些图像非常大,但在这种情况下,我的程序“仅”使用大约300Mo的RAM并不是那么多(我有8Go ...)。而且我特别不明白为什么我在这一步需要更多内存,因为两个Bitmap都已经创建了,而我只是“复制”另一个中的一个数据(至少那只是我想要做的!)。
我在Visual Studio 2013下使用C ++ MFC,而我的PC是64位,内存为8Go(Windows 10)。
非常感谢您的回答, 干杯, 亚历克斯。