我有一个在 Delphi 2006 中开发的旧应用程序,现在需要对其进行一些更改。
在这个应用程序中,我从 MsSQL“图像”字段加载图像,但是当我使用 delphi 2010 编译时出现错误:“引发异常类 EJPEG,消息为 'JPEG 错误 #51'。”
从数据库中获取图像的代码:
aStream := TMemoryStream.Create;
Try
If LoadFromBlob(FieldByName('Picture'), aStream) then
begin
Pic:=TJpegImage.Create;
try
Try
Pic.LoadFromStream(aStream);
Picture.Assign(Pic); // <------ JPEG Error #51 here w D2010
Except
//something went wrong loading
HandleImageError();
End;
finally
Pic.Free;
end;
end;
Finally
aStream.Free;
End;
// ............
function LoadFromBlob(const AField: TField; const Stream: TStream): boolean;
var
ResultStr: string;
PResultStr: PChar;
begin
Result := false;
if (Assigned(AField)) and (Assigned(Stream)) then begin
try
ResultStr := AField.Value;
If ResultStr <> '' then
begin
PResultStr := PChar(ResultStr);
Stream.Write(PResultStr^, Length(ResultStr));
Stream.Seek(0,0);
Result := true;
end;
except
end;
end;
end;
谷歌了一下,发现错误 #51 的意思是:JERR_NO_QUANT_TABLE,不管是什么意思。
当我用 Delphi 2006 编译时,相同的代码可以正常工作,没有错误,那么 D2010 出了什么问题?