Tôi đang sao chép hình ảnh. (Mã thực tế của tôi đang thay đổi kích thước hình ảnh nhưng điều đó không liên quan đến câu hỏi của tôi.) Mã của tôi trông giống như thế này.Sử dụng Graphics.DrawImage() để Vẽ hình ảnh với Kênh trong suốt/Alpha
Image src = ...
using (Image dest = new Bitmap(width, height))
{
Graphics graph = Graphics.FromImage(dest);
graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
graph.DrawImage(src, 0, 0, width, height);
dest.Save(filename, saveFormat);
}
Điều này có vẻ hoạt động tốt trừ khi src
được tải từ hình ảnh có độ trong suốt (chẳng hạn như GIF) hoặc kênh alpha (chẳng hạn như PNG).
Làm cách nào để có được DrawImage()
để chuyển kênh trong suốt/alpha sang hình ảnh mới, sau đó giữ chúng khi tôi lưu tệp?
Câu hỏi đặt ra là giá trị của biến 'saveFormat' là gì? Nó phải là 'PixelFormat.Format32bppArgb' (hoặc một định dạng khác với kênh alpha được xử lý). Hãy thử thêm: 'using (Image dest = new Bitmap (chiều rộng, chiều cao, PixelFormat.Format32bppArgb))'. –
Điều này dường như hoạt động đối với các kênh alpha, nhưng không hoạt động đối với các hiệu ứng trong suốt của GIF. 'saveFormat' sẽ thay đổi tùy thuộc vào định dạng của tệp đầu vào. Nếu tệp đầu vào không hỗ trợ kênh alpha, thì an toàn để giả định hình ảnh sẽ không chứa pixel kênh alpha. –
Vì vậy, giá trị của 'saveFormat' cho các tệp GIF sau đó là gì :)? –