2011-06-26 10 views
8

Tôi gặp sự cố khi chuyển đổi Màu trong Java. Vấn đề được đơn giản hóa trông giống như sau:Chuyển đổi RGBA bằng màu cơ bản thành RGB?

Ứng dụng của tôi chứa hình ảnh. Tôi đã đặt một Recangle trên hình ảnh này. Màu của Rectangle được định nghĩa là màu mới (255, 255, 0, 80).

Có thể tính/chuyển đổi Màu được hiển thị trên Màn hình thành màu không có Alpha-Value mà không cần phương thức getPixelColor() - Phương pháp? Công thức khác nhau: Tôi có thể tính một Màu không có giá trị alpha từ một Màu có giá trị alpha + màu cơ bản không?

Tôi hy vọng ai đó có thể giúp tôi.

Kính trọng, Michael

+0

Câu trả lời ngắn gọn: "Có". Khả năng đọc hữu ích [Alpha composting] (http://en.wikipedia.org/wiki/Alpha_compositing) –

Trả lời

7

Cũng như Wikipedia article bang (giả sử nền đục):

int r, g, b; 
r = fgColor.getRed() * fgColor.getAlpha() + bgColor.getRed() * (255 - fgColor.getAlpha()); 
g = fgColor.getGreen() * fgColor.getAlpha() + bgColor.getGreen() * (255 - fgColor.getAlpha()); 
b = fgColor.getBlue() * fgColor.getAlpha() + bgColor.getBlue() * (255 - fgColor.getAlpha()); 
Color result = new Color(r/255, g/255, b/255); 

Disclaimer: đã không kiểm tra này, nhưng nó cũng làm việc.

Nếu màu nền trước là không đổi (chẳng hạn như hình chữ nhật trong suốt), bạn có thể tối ưu hóa rất nhiều bằng cách precomputing fgColor.getComponent() * fgColor.getAlpha()(255 - fgColor.getAlpha()).

+0

Cảm ơn bạn rất nhiều vì đã nhận xét và viết mã. Nó hoạt động thực sự tốt :) – Michael

+0

@Michael: Rất vui khi biết điều đó :) –