Hãy hình dưới đây tôi sẽ sử dụng cho các ví dụ sau:Thay đổi kích thước khung hình xung quanh một bitmap?
Kích thước unchaged hiện đang 96 x 71
phép nói rằng tôi muốn thay đổi kích thước canvas để 115 x 80
- hình ảnh kết quả nên sau đó là:
Cuối cùng nếu tôi thay đổi kích cỡ nó đến một kích thước nhỏ hơn so với vải ban đầu là, ví dụ như 45 x 45
đầu ra sẽ xuất hiện như sau:
Đây là những gì tôi đã cố gắng cho đến nay:
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;
Nếu bạn thử ở trên trên một bitmap được tải vào một TImage thì bitmap thực tế không ở giữa, canvas sẽ thay đổi kích thước.
Các thuộc tính tôi đã đặt ra cho hình ảnh là:
Image1.AutoSize := True;
Image1.Center := True;
Image1.Stretch := False;
Tôi nghĩ rằng nó có thể là dòng Dest.Offset(Bitmap.Width div 2, Bitmap.Height div 2);
mà cần nhìn vào, để tính toán vị trí trung tâm có đúng không?
Mã đã được điều chỉnh/sửa đổi đôi chút từ câu hỏi gần đây David Heffernan trả lời.
Làm cách nào để thay đổi kích thước khung hình bao quanh bitmap, nhưng không kéo giãn bitmap?
Không vấn đề gì, tôi đã yêu cầu họ vì tôi nghĩ chúng quan trọng ở đây vì bạn đang thay đổi kích thước 'TImage.Picture.Bitmap'. – TLama
Có bạn đúng, tôi hoàn toàn bỏ qua nó :) –
Vì vậy, không phải là những gì gây ra hành vi, 'AutoSize'? Hãy thử với hình ảnh đơn giản với một hình ảnh bên trong, chỉ đặt 'Center' là True và thay đổi kích thước' TImage' trong một trình thiết kế biểu mẫu. Bạn sẽ thấy * canvas xung quanh *; không phải là những gì bạn đang yêu cầu? – TLama