【发布时间】:2015-05-21 20:18:03
【问题描述】:
我正在循环保存来自相机的图像,但有时它在某些系统中的 gdi+ 中出现一般错误,而我使用 i7 4gb ram 并且当我使用 i3 4gnb ram 系统时它不会出现
for (int i = 1; i <= frameno; i++)
{
Bitmap bm = new Bitmap(1024,1280);
Int32 s32MemID;
Camera.Memory.GetActive(out s32MemID);
Camera.Memory.CopyToBitmap(s32MemID, out bm);
bm.RotateFlip(RotateFlipType.Rotate90FlipNone);
String str = "";
if (i < 10)
{
str = "00";
}
else if (i < 100)
{
str = "0";
}
bm.Save(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\capture" + str + i + ".bmp", ImageFormat.Bmp);
Thread.Sleep(delay);
}
请有人给我解决方案,这对我来说非常重要
【问题讨论】:
-
是在保存期间还是在其他时间出现 GDI+ 错误?你真的需要在每个循环中创建一个新的位图,或者你可以通过在循环之前定义它来重用位图吗?您是否在循环结束时处理您的图像?听说过
i.ToString().PadLeft('0', 3)将 00 添加到索引器中,为什么以及循环中的延迟有多长。您似乎在使用哪个相机库? -
它是一个私人相机库,延迟约为 500,保存 bmp 时出现错误
-
您可以先将代码放入
using块中,例如using(Bitmap bm = new Bitmap(1024,1280)) { ... }。也许这可以解决您的问题,即使它不是处理IDisposable资源的正确方法。 -
是否可以至少显示在 Camera.Memory.CopyToBitmap 中 out Bitmap 变量是如何使用/创建/填充的?
-
@AlessandroD'Andria 我同意你的观点,并且也在这行上写了一个答案,但在这种情况下,out 参数让我有点困扰?