【发布时间】:2013-06-17 00:33:31
【问题描述】:
我正在使用 Delphi XE2(更新 3)和 GR32。我无法使用TBitmap32.LoadFromStream() 加载图像数据。它引发了以下异常:
Project MyApp.exe raised exception class EInvalidGraphic with message 'Bitmap image is not valid'.
代码
uses GR32, GifImg, PngImage, Vcl.Graphics;
var
pic: TBitmap32;
bs: TBytesStream;
begin
bs := TBytesStream.Create(TClientDataSet(cds).FieldByName('filedata').AsBytes);
try
pic := TBitmap32.Create;
try
// bs.SaveToFile('c:\delme.png');
// pic.LoadFromFile('c:\delme.png');
pic.LoadFromStream(bs); // <- EInvalidGraphic exception
// do something with 'pic'
finally
FreeAndNil(pic);
end;
finally
FreeAndNil(bs);
end;
end;
解决方法
如果我注释LoadFromStream() 代码并取消注释前两行,它可以工作——因此它能够在从文件加载图像时确定图像格式。在此示例中,bs 包含有效的 PNG 图像。但是,有时它可能是 GIF、JPG、BMP 或其他图形格式。
我也知道可以使用中间对象(例如TPNGImage、TJPEGImage等),使用LoadFromStream()将图像数据加载到中间对象中,然后将Assign()加载到@ 987654331@。但是,如果TBitmap32 可以处理任何类型的图像而不需要中间对象,那就更好了,我认为它可以...
问题
有谁知道如何使用TBitmap32.LoadFromStream() 来加载图像并让它自动识别图像格式而不将图像保存到 HDD(即使是暂时的),或使用中间对象?
【问题讨论】:
-
尝试 Vampyrу 成像。该项目旨在结合Graphics32的速度和GraphicEx的格式灵活性。不知道他们成功了多少,但有来自用户的热情报告。
-
@Arioch'The - 我会看看。谢谢。仅供参考 - 这是 SourceForge 链接:imaginglib.sourceforge.net
标签: delphi image-formats graphics32