我正在使用 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()
将其加载到TBitmap32
. 但是,如果TBitmap32
可以在没有中间对象的情况下处理任何类型的图像会更好,我认为它可以......
问题
有谁知道如何使用TBitmap32.LoadFromStream()
加载图像并让它自动识别图像格式而不将图像保存到 HDD(即使是暂时的),或者使用中间对象?