我正在尝试调整 Timage 图像的大小并将其保存为 jpg。但是,保存的图像出现了空白。
以下是我分配 Timage 的方式:
保存的 jpg 变成了空白,我做错了什么?我只需要从磁盘中加载图像到 Timage,然后调整宽度和高度,并再次分配到 jpg 中。
以下是我分配 Timage 的方式:
begin
with TOpenDialog.Create(self) do
try
Caption := 'Open Image';
Options := [ofPathMustExist, ofFileMustExist];
Filter := 'JPEG Image File (*.jpg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp';
if Execute then
image1.Picture.LoadFromFile(FileName);
finally
Free;
end;
end;
以下是我调整图片大小并将其分配到JPG文件中的方法。
with Image2.Canvas do begin
Lock;
try
try
Image2.Picture.Graphic.Width := 50;
Image2.Picture.Graphic.Height := 50;
FillRect(ClipRect);
StretchDraw(rect(0, 0, 50, 50), image1.Picture.Bitmap);
except
on E: Exception do
//log
end;
finally
Unlock;
end;
end;
Jpg := TJPEGImage.Create;
try
Jpg.Performance := jpBestSpeed;
Jpg.ProgressiveEncoding := True;
Jpg.ProgressiveDisplay := True;
Jpg.Assign(image2.Picture.Bitmap);
Jpg.CompressionQuality := 90;
Jpg.Compress;
jpg.SaveToFile('screena.jpg');
finally
Jpg.Free;
end;
保存的 jpg 变成了空白,我做错了什么?我只需要从磁盘中加载图像到 Timage,然后调整宽度和高度,并再次分配到 jpg 中。
TOpenDialog
意味着正在使用UI。无论如何,TImage2
并不是真正需要的,可以用简单的TBitmap
替换:bmp := TBitmap.Create; try bmp.Width := 50; bmp.Height := 50; bmp.Canvas.StretchDraw(rect(0, 0, 50, 50), image1.Picture.Graphic); ... Jpg.Assign(bmp); ... finally bmp.Free; end;
- Remy Lebeau