问题描述
我正在尝试将数据库映像链接到delphi 10中的TDBImage组件,但是它一直给我一个错误,即使没有语法错误,我的指定字段也找不到。 这是我正在使用的代码。
function TForm1.JPEGStartBlob(fPic: TBlobField): integer;
var
bS: TAdoblobStream;
buffer: Word;
hx: string;
begin
Result := -1;
bS := TAdoblobStream.Create(fPic,bmRead);
try
while (Result = -1) and (bS.Position + 1 < bS.Size) do
begin
bS.ReadBuffer(buffer,1);
hx := IntToHex(buffer,2);
if hx = 'FF' then
begin
bS.ReadBuffer(buffer,1);
hx := IntToHex(buffer,2);
if hx = 'D8' then
Result := bS.Position - 2
else if hx = 'FF' then
bS.Position := bS.Position - 1;
end;
end;
finally
bS.Free;
end;
end;
procedure TForm1.ShowImage(Sender: TObject);
var
bsImage : TAdoblobStream;
jImage : TJPEGImage;
begin
bsImage := TAdoblobStream.Create(adoLodgeI.FieldByName('Image') // this is the field that can't be
// found
AS TBlobField,bmRead);
try
bsImage.Seek(JPEGStartBlob(adoLodgeI.FieldByName('Image') AS TBlobField),soFromBeginning);
jImage := TJPEGImage.Create;
try
jImage.LoadFromStream(bsImage);
dbiLodge1.Picture.Graphic := jImage;
finally
jImage.Free;
end;
finally
bsImage.Free;
end;
end;
如果有人可以帮助,将不胜感激。
解决方法
您可以使用TWICImage
,然后直接为它分配一个TDBImage.Picture
Var
AStream: TMemoryStream;
APic: TWICImage;
begin
AStream := TMemoryStream.Create;
try
// Here "Data" is a BlobField
AStream:= TMemoryStream(TPics.CreateBlobStream(TPics.FieldByName('Data'),bmRead));
AStream.Position:= 0;
APic := TWICImage.Create;
try
APic.LoadFromStream(AStream);
DBImage1.Picture.Assign(APic);
finally
APic.Free;
end;
finally
AStream.Free;
end;
end;
可以处理*.jpeg;*.jpg;*.png;*.bmp;*.ico
张图片,而无需担心图片是否为TJPEGImage
。