delphi中,将数据库中的不同类型的图片显示出来,用什么控件来实现?
发布网友
发布时间:2022-05-05 06:19
我来回答
共2个回答
热心网友
时间:2023-10-12 15:20
可以通过流的头(也就是文件头)判断图片格式
然后分别用jpgimage.bitmap,pngobject,gifimage来装载流,然后显示到TImage里
还有一种方法是用GDI+的GPImage,把Stream转换成IStream,然后用GPImage.loadfromstream来装载图片,gpimage会自动识别图片格式并显示追问以流得方式怎样判断格式,我从网上看了一下,都是获取的文件流,在判断的格式,从数据库中以流得方式读出来能判断格式吗,给段代码吧
追答var
Buffer:Word;
begin
// stream 是你从数据库取出来的流
Stream.Position := 0;
Stream.ReadBuffer(Buffer,2);
case Buffer of
$4D42: ShowMessage('bmp');
$D8FF: ShowMessage('jpg');
$4947: ShowMessage('gif');
$4238: ShowMessage('png');
$4949: ShowMessage('tiff');
$050A: ShowMessage('pcx');
$4238: ShowMessage('psd');
$A659: ShowMessage('ras');
$DA01: ShowMessage('sgi');
else
ShowMessage('无法识别格式');
end;
end;
热心网友
时间:2023-10-12 15:20
以下是我曾经写过程序的一段代码,用的是oracle数据库和delphi
希望有所帮助:
在界面上放了TadoTable和Timage控件
var
jpg:TJPEGImage;
myStream:TmemoryStream;
begin
if adoTable_main.ControlsDisabled then exit;
if (TBlobField(adotable_main.FieldByName('photo_sample')).BlobSize>0) then
begin
try
jpg:=TJPEGImage.Create;
myStream:=TMemoryStream.Create;
TBlobField(adotable_main.FieldByName('photo_sample')).SaveToStream(myStream);
myStream.Position:=0;
jpg.LoadFromStream(myStream);
image1.Picture.Assign(jpg);
finally
jpg.Free;
myStream.Free;
end;
end else
image1.Picture.Graphic:=nil;
end;追问但是你这个只能处理jpg格式的文件,对其他格式的文件还是显示不出来啊!