Sau khi tìm kiếm một cách để thay đổi kích thước TPngObject và duy trì các kênh bạch + alpha không có kết quả, tôi đang cố gắng để sử dụng GDI +Làm cách nào để thay đổi kích thước hình ảnh PNG bằng các kênh Alpha bằng GDI +?
Đây là mã của tôi, và nó dường như để hoạt động tốt. nó sẽ giảm/tăng tỷ lệ PNG. Tested trên XP cho đến nay:
uses GDIPAPI, GDIPOBJ, GDIPUTIL;
procedure TForm1.Button1Click(Sender: TObject);
var
encoderClsid: TGUID;
stat: TStatus;
img, img_out: TGPImage;
begin
img := TGPImage.Create('in.png'); // 200 x 200
img_out := img.GetThumbnailImage(100, 100, nil, nil);
GetEncoderClsid('image/png', encoderClsid);
img_out.Save('out.png', encoderClsid);
img_out.free;
img.Free;
end;
Câu hỏi của tôi: được sử dụng GetThumbnailImage
cách chính xác để làm điều này? Tôi không tìm thấy phương pháp nào khác.
Tôi không hiểu tại sao/cách tính minh bạch/alpha duy trì ở đây, nhưng nó hoạt động :) cảm ơn bạn! – zig
Bạn được chào đón! Kênh alpha được bảo toàn vì định dạng bitmap đầu ra (mà tôi đã phải chỉ định rõ ràng ngay cả khi nó là mặc định do quá tải không rõ ràng). Nếu bạn muốn sử dụng, ví dụ: 'PixelFormat32bppRGB', bạn sẽ mất kênh alpha. Và việc render chính nó xem xét tính minh bạch (ngay cả trong GDI thuần túy). – TLama
Cảm ơn. BTW, GetThumbnailImage dường như lại mẫu hình ảnh khá độc đáo quá. – zig