Возьмите под изображением я буду использовать для следующих примеров:Измените размер холста вокруг растрового изображения?
Размеры unchaged в настоящее время 96 x 71
Позволяет сказать, что я хотел, чтобы изменить размер холста, чтобы 115 x 80
- результирующее изображение должно затем:
Наконец, если я изменить размер его меньшего размера, чем оригинал холст был, например, 45 x 45
выход будет выглядеть так:
Это то, что я пытался до сих пор:
procedure ResizeBitmapCanvas(Bitmap: TBitmap; H, W: Integer);
var
Bmp: TBitmap;
Source, Dest: TRect;
begin
Bmp := TBitmap.Create;
try
Source := Rect(0, 0, Bitmap.Width, Bitmap.Height);
Dest := Source;
Dest.Offset(Bitmap.Width div 2, Bitmap.Height div 2);
Bitmap.SetSize(W, H);
Bmp.Assign(Bitmap);
Bmp.Canvas.FillRect(Source);
Bmp.Canvas.CopyRect(Dest, Bitmap.Canvas, Source);
Bitmap.Assign(Bmp);
finally
Bmp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ResizeBitmapCanvas(Image1.Picture.Bitmap, 110, 110);
end;
Если вы попробуете приведенное выше на растровом изображении, загруженном в TImage, фактическое растровое изображение не центрируется, холст действительно меняет размер.
Свойства Я набор для изображения являются:
Image1.AutoSize := True;
Image1.Center := True;
Image1.Stretch := False;
Я думаю, что это может быть линия Dest.Offset(Bitmap.Width div 2, Bitmap.Height div 2);
, которая нуждается глядя, чтобы вычислить правильное положение центра?
Код был адаптирован/изменен немного из недавнего вопроса, на который ответил Дэвид Хеффернан.
Как изменить размер холста, окружающего растровое изображение, но не растягивая растровое изображение?
Нет проблем, я попросил их, потому что я думаю, что они важны здесь, так как вы изменяете размер 'TImage.Picture.Bitmap'. – TLama
Да, вы правы, я полностью упустил это :) –
Итак, разве это не то, что вызывает поведение, 'AutoSize'? Попробуйте с простым изображением с изображением внутри, установите только «Центр» в True и измените размер «TImage» в дизайнере формы. Вы увидите окружающий холст *; это не то, о чем вы просите? – TLama