2017-04-16 21 views
5

Tôi đang làm việc trên một chương trình mà tôi lấy các giá trị RGB từ một phần của hình ảnh. Tôi muốn loại bỏ bóng tối trong màu sắc và làm cho nó tươi sáng. Những gì tôi làm là tôi sử dụng Color.RGBtoHSB Tôi sau đó lấy kênh độ sáng và đặt nó vào giá trị cao nhất nó có thể trong phạm vi sau đó chuyển đổi HSB trở lại RGB. Tuy nhiên, khi tôi làm điều này, màu sắc thay đổi hoàn toàn. Đây là một ví dụ với màu đỏ đậm và nó chuyển sang màu tím và mã tôi sử dụng để làm điều này.Chuyển màu tối sang màu sáng trong java

System.out.println("Before Conversion:"); 
System.out.println("R: " + rAvg + "\nG :" + gAvg + "\nB :" + bAvg); 
Color.RGBtoHSB(rAvg, gAvg, bAvg, hsv); 

hsv[2] = 100; //Set to max value 
System.out.println("H: " + hsv[0] * 360 + "\nS: " + hsv[1] * 100 + "\nV :" + hsv[2]); 

int rgb = Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]); 
System.out.println("After conversion"); 
Color color = new Color(rgb); 
System.out.println("R: " + color.getRed()); 
System.out.println("G: " + color.getGreen()); 
System.out.println("B: " + color.getBlue()); 

Output:

Before Conversion: 
R: 128 
G :39 
B :50 
H: 352.58426 
S: 69.53125 
V :100.0 
After conversion 
R: 158 
G: 126 
B: 233 

Trả lời

2

Độ sáng, hsv[2], cần phải là một giá trị giữa 0 và 1. Hãy thử hai dòng sau mã:

hsv[2] = 1; //Set to max value 
    System.out.println("H: " + hsv[0] * 360 + "\nS: " + hsv[1] * 100 + "\nV :" + hsv[2] * 100); 
+0

công trình như kỳ diệu. Tôi đã có ý tưởng đúng chỉ là những con số sai:/thats một chút khó chịu. Cảm ơn đã giúp đỡ :) – cuber

Các vấn đề liên quan