Hallo Zusammen,
ich mochte einen kleinen Konverter programmieren, der mit die BitWerte aus dem RGB-Farbmodel in das YUV-Farbmodel und umgekehrt berechnet. Die Werte sollen jeweils immer nur in einem Wertebereich von 8 Bit, also 0..255 liegen. Eigentlich sollte das keine große Sache sein, aber ich bekomms einfach nicht gebacken.
Erstmal gibt es auf jeder Seite im Internet unterschiedliche Formeln. z.B.:
RGB <--> YUV Conversion Formulas
YUV/RGB conversion formulas Definition from PC Magazine Encyclopedia
Welcome to FOURCC.org - YUV to RGB Conversion
YUV-Farbmodell ? Wikipedia
...
Ich habe zwar schon alle Varianten durch, aber hier mal mein Code von der ersten Seite:
[JAVA=42]
private void rgbToYuv(){
this.y = (int) Math.round(this.r * 0.299 + this.g * 0.587 + this.b * 0.114);
this.u = (int) Math.round(this.r * -0.169 + this.g * -0.332 + this.b * 0.500 + 128);
this.v = (int) Math.round(this.r * 0.500 + this.g * -0.419 + this.b * -0.0813 + 128);
}
private void yuvToRgb(){
this.r = (int) Math.round(this.y + (1.4075 * (this.v - 128)));
this.g = (int) Math.round(this.y - (0.3455 * (this.u - 128)) - (0.7169 * (this.v - 128)));
this.b = (int) Math.round(this.y + (1.7790 * (this.u - 128)));
}
[/code]
von RGB nach YUV lässt es sich sehr gut umrechnen, nur wenn ich mit den errechnetten YUV Werten wieder die RGB-Werte errechnen will, kommt totaler Quatsch raus. Hat da jemand einen Tip, was ich falsch gemacht haben könnte?
lg, Soahc
ich mochte einen kleinen Konverter programmieren, der mit die BitWerte aus dem RGB-Farbmodel in das YUV-Farbmodel und umgekehrt berechnet. Die Werte sollen jeweils immer nur in einem Wertebereich von 8 Bit, also 0..255 liegen. Eigentlich sollte das keine große Sache sein, aber ich bekomms einfach nicht gebacken.
Erstmal gibt es auf jeder Seite im Internet unterschiedliche Formeln. z.B.:
RGB <--> YUV Conversion Formulas
YUV/RGB conversion formulas Definition from PC Magazine Encyclopedia
Welcome to FOURCC.org - YUV to RGB Conversion
YUV-Farbmodell ? Wikipedia
...
Ich habe zwar schon alle Varianten durch, aber hier mal mein Code von der ersten Seite:
[JAVA=42]
private void rgbToYuv(){
this.y = (int) Math.round(this.r * 0.299 + this.g * 0.587 + this.b * 0.114);
this.u = (int) Math.round(this.r * -0.169 + this.g * -0.332 + this.b * 0.500 + 128);
this.v = (int) Math.round(this.r * 0.500 + this.g * -0.419 + this.b * -0.0813 + 128);
}
private void yuvToRgb(){
this.r = (int) Math.round(this.y + (1.4075 * (this.v - 128)));
this.g = (int) Math.round(this.y - (0.3455 * (this.u - 128)) - (0.7169 * (this.v - 128)));
this.b = (int) Math.round(this.y + (1.7790 * (this.u - 128)));
}
[/code]
von RGB nach YUV lässt es sich sehr gut umrechnen, nur wenn ich mit den errechnetten YUV Werten wieder die RGB-Werte errechnen will, kommt totaler Quatsch raus. Hat da jemand einen Tip, was ich falsch gemacht haben könnte?
lg, Soahc
Zuletzt bearbeitet: