我正在使用 Delphi 7,我必须从嵌入在我的 Delphi 应用程序中的 FlashMovie 生成大量位图。图片的清晰度为1010x720。
当我生成超过 6000 张图片(每次数量都不一样)时,我得到一个 EOutOfResources 异常。我环顾四周,似乎它可能来自缺乏可用的句柄。
这是代码:
var
FFlashPlayerControlExport:TFlashPlayerControl;
Bmp:TBitmap;
pPNG:TPNGObject;
begin
Bmp := FFlashPlayerControlExport.CreateFrameBitmap;
Bmp.Width := StrToInt(aArgs[5]);
Bmp.Height := StrToInt(aArgs[6]);
pPNG := TPNGObject.Create;
pPNG.Assign(Bmp);
pPNG.SaveToFile(sFileName);
pPNG.Free;
DeleteObject(Bmp.Handle);
Bmp.Free;
end;
我在 Bmp.Free 之前尝试过 CloseHandle(Bmp.Handle),但我得到了 EExternalException。
谢谢大家的帮助!
2012 年 12 月 6 日更新:
感谢 Arioch'The 的回答,我尝试直接设置 FFlashPlayerControlExport 的 Width 和 Height,而不是使用 Bmp.Width 和 Bmp.Height 它有帮助,因为现在我没有得到 EOutOfResources 异常,但是 CreateFrameBitmap 之后保存了一张全黑图片一会儿。
FlashPlayerControl 仍在运行,因为我在屏幕上看到了图片。
代码更新:
var
FFlashPlayerControlExport:TFlashPlayerControl;
Bmp:TBitmap;
pPNG:TPNGObject;
begin
FFlashPlayerControlExport.Width := StrToInt(aArgs[5]);
FFlashPlayerControlExport.Height := StrToInt(aArgs[6]);
Bmp := FFlashPlayerControlExport.CreateFrameBitmap;
pPNG := TPNGObject.Create;
pPNG.Assign(Bmp);
pPNG.SaveToFile(sFileName);
pPNG.Free;
Bmp.Free;
end;
2012 年 12 月 20 日更新:
在联系 FlashPlayerControl 开发团队后,我发现当应用程序达到 10.000 个 GDI 对象时,位图会变黑。他们为我的问题提供了有效的帮助,与他们联系很有效:)
我最终发现 GDI 对象泄漏来自我代码的另一个并行部分。这个主题很接近:)