我想用這將在下文中提到德爾福DLL映像stretchdraw錯誤
{ to resize the image }
function ResizeImg(maxWidth,maxHeight: integer;thumbnail : TBitmap): TBitmap;
var
thumbRect : TRect;
begin
thumbRect.Left := 0;
thumbRect.Top := 0;
if thumbnail.Width > maxWidth then
begin
thumbRect.Right := maxWidth;
end
else
begin
thumbRect.Right := thumbnail.Width;;
end;
if thumbnail.Height > maxHeight then
begin
thumbRect.Bottom := maxHeight;
end
else
begin
thumbRect.Bottom := thumbnail.Height;
end;
thumbnail.Canvas.StretchDraw(thumbRect, thumbnail) ;
//resize image
thumbnail.Width := thumbRect.Right;
thumbnail.Height := thumbRect.Bottom;
//display in a TImage control
Result:= thumbnail;
end;
當我使用這個應用程序調用它正常工作,一個DLL函數(養活所有的圖像調整大小(規模)的位圖圖像我的列表視圖):
//bs:TStream; btmap:TBitmap;
bs := CreateBlobstream(fieldbyname('Picture'),bmRead);
bs.postion := 0;
btmap.Loadfromstream(bs);
ListView1.Items[i].ImageIndex := ImageList1.Add(ResizeImg(60,55,btmap), nil);
但是當我嘗試此應用程序調用(以獲得單個圖像到我的TImage組件):
bs := CreateBlobstream(fieldbyname('Picture'),bmRead);
bs.postion := 0;
btmap.Loadfromstream(bs);
Image1.Picture.Bitmap := ResizeImg(250,190,btmap);
它給了我一個錯誤的:
thumbnail.Canvas.StretchDraw(thumbRect, thumbnail) ;
說:
AV at address 00350422 in module 'mydll.dll' Read of Address 20000027
當我結束我的可執行文件,我得到這樣的:
runtime error 216 at 0101C4BA
如果我定義和使用相同的函數(ResizeImg
)在我的EXE pas文件裏面,它工作得很好,沒有任何錯誤。
該函數意味着給出完全不同的TBitmap,但它只是返回輸入TBitmap。我建議將這個例程重構成一個過程。 – NGLN
我不能使用它的過程,因爲我將函數的結果分配給其他組件 – Shirish11