HI! Bạn có thể vui lòng cho tôi biết cách thay đổi kích thước hình ảnh .png. Hoặc tốt hơn là đưa ra một ví dụ. Tôi đã tìm kiếm câu trả lời trong một thời gian dài và có vẻ như không ai biết cách thay đổi kích thước hình ảnh .png và giữ sự trong suốt của nó. :(Thay đổi kích thước hình ảnh PNG
Trả lời
tôi phải thú nhận rằng tôi không có bất kỳ kinh nghiệm trong lập trình chơi với png.
Dù sao, bạn sẽ tìm thấy một số libs here. Ngoại trừ sự hỗ trợ Delphi PNG mẹ đẻ, tôi nghĩ rằng bạn sẽ tìm thấy ở đó tất cả các lib2 hiện tại (có nguồn gốc từ delphi của khóa học)
Nếu không có gì giúp bạn ở đó, hãy cân nhắc chơi với ImageMagick nếu có thể ... Đó là con dao quân đội Thụy Sĩ của thao tác hình ảnh và tất cả những gì có thể làm là khả thi trong dòng lệnh
Bạn có thể sử dụng Windows Imaging Component (WIC) trong Delphi 2010. Bạn có thể tải hình ảnh PNG của mình trong một lớp học TWICImage, sau đó giải nén giao diện IWICBitmapScaler từ tay cầm của nó.
Sử dụng IWICBitmapScaler, bạn có thể giảm kích thước hoặc tăng hình ảnh.
WIC khả dụng trên Windows Vista và Windows 7. Đối với Windows XP, bạn phải cài đặt bản cập nhật trước khi sử dụng.
Tác giả gốc của thành phần PNGImage (cơ sở của thành phần gốc Delphi) có một diễn đàn nơi anh và những người khác đăng đoạn mã về cách thực hiện mọi thứ bằng thành phần PNGImage.
Trước khi diễn đàn bị gỡ xuống, tôi đã chụp một bản sao của tất cả các đoạn mã và đặt chúng trên trang web CodeGear Code Central.
Hầu hết nếu không phải tất cả đều hoạt động với hình ảnh PNG gốc và duy trì kênh Alpha.
Dưới đây là danh sách đầy đủ các ví dụ bao gồm trong gói:
- mượt mà xoay một đối tượng PNG
- Thu nhỏ một TPNGObject sử dụng một thuật toán mịn
- Slice một PNG thành nhiều phần nhỏ hơn
- Lưu hình ảnh dưới dạng bitmap hoặc png.
- Sample đoạn hậu duệ
- Đọc tất cả text-Chunks và viết giá trị vào một TStrings đối tượng
- hiển thị một hộp thông báo với các thông tin chiết xuất từ File PNG
- Tìm và cắt một khối từ một hình ảnh PNG
- phương pháp này chuyển đổi png vào một đối tượng jpeg
- phương pháp này chuyển đổi png vào một đối tượng bmp
- Overlay một PNG qua một
- Điều này làm cho t anh hình ảnh một nửa trong suốt
- Flips một hình ảnh png theo chiều dọc và tiết kiệm lại
- Vẽ một hình ảnh png trên desktop
Dưới đây là liên kết: CodeCentral PNG Methods
Có phiên bản của PngImage (Graphics Portable Network Delphi) Điều đó cho phép thực hiện điều đó thông qua StretchDraw đơn giản.
Tôi có phiên bản cho phép để làm điều đó - 1,564 (ngày 31 tháng 7 năm 2006)
Và phiên bản mà không cho phép - 1,4361 (08 tháng 3 2003)
Để thực hiện nó, tôi đã sử dụng:
tim .png - với tính minh bạch và tôi đã quản lý để thay đổi kích thước và lưu với độ trong suốt.
empty.png - png trong suốt tinh khiết. nó được sử dụng làm tờ giấy trắng để đưa hình ảnh của tôi lên đó.
Tôi đã kiểm tra nó thông qua mã ví dụ:
procedure TForm1.Button1Click(Sender: TObject);
var pic_empty, pic_stamp, pic_result :TPicture;
r:TRect;
png : TPNGObject;
begin
pic_stamp := TPicture.Create;
pic_stamp.LoadFromFile('c:\heart.png');
pic_stamp.Graphic.Transparent := True;
pic_empty := TPicture.Create;
pic_empty.LoadFromFile('c:\empty.png');
pic_empty.Graphic.Transparent := True;
r.Left := 0;
r.Top := 0;
r.Right := r.Left + 100;
r.Bottom := r.Top + 100;
pic_result := tpicture.Create;
pic_result.Bitmap.Assign(pic_empty.Graphic);
pic_result.Graphic.Transparent := True;
pic_result.Bitmap.Canvas.StretchDraw(r,pic_stamp.Graphic);
pic_result.Bitmap.Width :=100;
pic_result.Bitmap.Height:=100;
png := TPNGObject.Create;
png.Assign(pic_result.Bitmap);
png.SaveToFile('c:\result.png');
png.Free;
pic_result.Free;
pic_empty.Free;
pic_stamp.free;
end;
Delphi-7, win7 x64