在Delphi 7中,我有一个使用TCanvas组件输出一些信息的库。生成的图像约为4800 * 6000像素,我想将其打印并保存为.jpeg
。使用Delphi处理大图像,保存为.jpeg
为了达到这个目的,我创建了一个TBitmap,并将其Canvas作为参数提供给库,然后将位图分配给jpeg。显然,这样会占用太多的内存,因为在设置位图的宽度和高度时出现异常,并提示“没有足够的存储空间来处理此命令”。
// output to printer
Printer.BeginDoc();
doPrint(Printer.Canvas);
Printer.EndDoc();
// output in bmp.Canvas
bmp := TBitmap.Create;
bmp.Width := Printer.PageWidth;
bmp.Height := Printer.PageHeight; // <- BAM! Exception!
doPrint(bmp.Canvas);
// save as jpeg
jpg := TJPEGImage.Create;
jpg.Assign(bmp);
jpg.SaveToFile('...');
// free
bmp.Free();
jpg.Free();
我在做什么错?我可以直接保存Printer.Canvas作为.jpeg
文件吗?
编辑:更新后的图像尺寸近似为2000 * 2000 4800 * 6000
这是什么库,你是否被迫GETMEM或类似的东西?我问这个问题,因为这是一个TBitmap,你会没事的。 RE – Reallyethical 2009-10-28 20:36:44
我没有使用任何特殊的东西,图书馆只是使用Canvas输出一些信息的东西,它也是用Delphi编写的,整个源代码中只有“var s:TStringList”和“ cnv.TextOut(..)“,所以它可以很容易地重新编译,它应该没问题。 – Tom 2009-10-28 20:41:52