algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Transformacja HSV RGB - Implementacja w Java
Ocena użytkownikóww: *****  / 2
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 06 września 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Hsv_rgb.java:
/**
  Transformacja pomiedzy modelami HSV i RGB
  www.algorytm.org
  (c)2005 Tomasz Lubinski
 */
public class Hsv_rgb {

	private static double[] hsv2rgb(double hue, double sat, double val) {
		double red = 0, grn = 0, blu = 0;
		double i, f, p, q, t;
		double result[] = new double[3];

        if(val==0) {
                red = 0;
                grn = 0;
                blu = 0;
        } else {
                hue/=60;
                i = Math.floor(hue);
                f = hue-i;
                p = val*(1-sat);
                q = val*(1-(sat*f));
                t = val*(1-(sat*(1-f)));
                if (i==0) {red=val; grn=t; blu=p;}
                else if (i==1) {red=q; grn=val; blu=p;}
                else if (i==2) {red=p; grn=val; blu=t;}
                else if (i==3) {red=p; grn=q; blu=val;}
                else if (i==4) {red=t; grn=p; blu=val;}
                else if (i==5) {red=val; grn=p; blu=q;}
        }
        result[0] = red;
        result[1] = grn;
        result[2] = blu;
        return result;
}

	private static double[] rgb2hsv(double red, double grn, double blu){
		double hue, sat, val;
		double x, f, i;
		double result[] = new double[3];

        x = Math.min(Math.min(red, grn), blu);
        val = Math.max(Math.max(red, grn), blu);
        if (x == val){
                hue = 0;
                sat = 0;
        }
        else {
                f = (red == x) ? grn-blu : ((grn == x) ? blu-red : red-grn);
                i = (red == x) ? 3 : ((grn == x) ? 5 : 1);
                hue = ((i-f/(val-x))*60)%360;
                sat = ((val-x)/val);
        }
        result[0] = hue;
        result[1] = sat;
        result[2] = val;
        return result;
}
	public static void main(String[] args) {
        int x;
        double h,s,v;
        double r,g,b;
        double result[];

        System.out.println("1. Dla transformacji HSV -> RGB");
        System.out.println("2. Dla transformacji RGB -> HSV");
        x = Console.readInt("?");
        if (x == 1){
        	h = Console.readDouble("H=");
        	s = Console.readDouble("S=");
        	v = Console.readDouble("V=");
            result = hsv2rgb(h,s,v);
            System.out.println("R="+result[0]+", G="+result[1]+", B="+ result[2]);
        }
        else {
        	r = Console.readDouble("R=");
        	g = Console.readDouble("G=");
        	b = Console.readDouble("B=");
            result = rgb2hsv(r,g,b);
            System.out.println("H="+result[0]+", S="+result[1]+", V="+ result[2]);
        }		
	}
}
Dodaj komentarz