2017-04-10 7 views
7

Ich bin kein englischer Muttersprachler, so bitte Ausreden keine Übersetzungsfehler.RGB-Farben in Java Vs VB.net

Ich habe nicht wirklich eine Codierung Problem. Es ist eher eine konzeptionelle Frage.

schrieb ich zwei Mal das gleiche Stück Code, ein Bild in eine Liste von RGB-Werten zu übersetzen. (1 Kombination von 3 Werten für jedes Pixel).

ich den Code zuerst in VB.net verwenden schrieb:

Dim bmp As New Bitmap(File) 
For x As Integer = 0 To w - 1 
    For y As Integer = 0 To h - 1 
     Dim c As Color = bmp.GetPixel(x, y) 
     Dim Red as integer = c.R 
     Dim Green as integer = c.G 
     Dim Blue as integer = c.B 
    Next y 
next x 

Danach schrieb ich folgendes in Java:

BufferedImage image = ImageIO.read(new File(File)) 
for (int i = 0; i < w; i++) { 
    for (int j = 0; j < h; j++) { 
     int pixel = image.getRGB(i,j); 
     int Red = ((pixel >> 16) & 0xff); 
     int Green = ((pixel >> 8) & 0xff); 
     int Blue = ((pixel) & 0xff); 
    } 
} 

Meine Erwartung wäre, die gleichen Werte von beiden Stücke zu bekommen Code, da sie das gleiche Bild verwenden. Ich habe es auf einem Bild (270x320) versucht, das ein Foto war (also ein ganzes Spektrum von Farben). Zu meiner Überraschung sah ich dort kleine Unterschiede in den RGB-Werten zwischen den VB.net- und Java-Codes.

Wenn ich die Java (rot) gegen die VB.net (rot), die Java (grün) gegen die VB.net (grün) und die Java (blau) s vergleicht im Vergleich zu VB.net (blau) vergleiche ich 270x320x3 = 259.2k Kombinationen. Die Unterschiede zwischen den ganzen Zahlen aus dem VB.net und aus dem Java-Code bekommen sind wie folgt:

  • Kein Unterschied: 250.178 (96,5%)
  • Einen Unterschied: 7426 (2,9%)
  • Zwei Unterschied : 1582 (0,6%)
  • Drei Differenz: 14 (0,0%)
  • vier oder mehr diff .: 0 (0.0%)

Kann mir jemand erklären, wo dieser Unterschied her kommt m? Hat es damit zu tun, wie man die Farben liest, wie man das Bild puffert oder mit Anti-Aliasing?

wirklich gespannt, was der Grund dafür ist, thx im Voraus

+0

Es _might_ die Bild-Metadaten, die die Bildverarbeitungsbibliothek erzählt leicht die Farben zu ändern. Könnte sein, dass eine Bibliothek die Metadaten honoriert, während andere sie ignoriert. Beispiele für solche Metadaten sind das ICC-Farbprofil, der Gammakorrekturwert usw. –

+1

Was ist die Dateierweiterung? –

+1

Ich habe versucht, Jpeg Vs JPEG und JPEG im Vergleich zu Png –

Antwort

1

Wie bereits von anderen erwähnt, wird die Differenz durch JPEGs verlustbehaftete Kompression verursacht.

Sie sollten diese Methoden mit einem verlustfreien Format testen.

Verwandte Themen