Ich arbeite derzeit an einem Anwendungsfall, bei dem ich feststellen muss, ob das hochgeladene Bild Graustufen oder RGB ist. Ich habe einige Möglichkeiten gefunden, dies zu identifizieren, aber ich bin nicht sicher, ob sie zuverlässig sind und gemeinsam verwendet werden können, um zu bestätigen, ob das Bild Graustufen ist oder nicht.Zuverlässiger Weg, um zu überprüfen, ob das Bild Graustufen ist
Teil 1: Lesen Sie Image und erhalten Sie NumberDataElements mit Raster.
Ich beobachtete Wert von elem ist in einigen Fällen "1", aber nicht in allen.
Teil 2: Überprüfen Sie den RGB-Wert jedes Pixels. Wenn der R-, G-, B-Wert der gleiche Pixel ist.
BufferedImage image = ImageIO.read(file);
Raster ras = image.getRaster();
//Number of Color elements
int elem = ras.getNumDataElements();
int width = image.getWidth();
int height = image.getHeight();
int pixel,red, green, blue;
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++) {
//scan through each pixel
pixel = image.getRGB(i, j);
red = (pixel >> 16) & 0xff;
green = (pixel >> 8) & 0xff;
blue = (pixel) & 0xff;
//check if R=G=B
if (red != green || green != blue) {
flag = true;
break;
}
}
Hier prüfen i R, G, B sind Werte für alle Dienste gegebenen Pixel und dieses Verhalten ist für alle Pixel konsistent.
Ich verwende diese 2 Ansätze, aber nicht sicher, wie genau sie sind. Mit freundlichen Grüßen ..
'rot! = Grün || grün! = blau || rot! = blau' Es sollten nur zwei Vergleiche notwendig sein. Außerdem rufen Sie zweimal "Pause", die zweite ist redundant. – leonbloy
Obwohl "grau" in RGB R = G = B bedeutet, kann es einige Variationen geben, z. G. Wenn ein Bild ein eingebettetes Farbprofil hat oder von jpeg wiederhergestellt wird. Ich glaube, der zuverlässigere, aber langsamere Weg ist es, Pixel in HSV zu konvertieren und zu überprüfen, ob S (Sättigung) nahe 0 ist. –
@SashaSalauyou wie ich es verstehe, auch wenn das Bild jpeg war und eine Farbentabelle verwendet, wird dieser Code immer noch arbeiten, da das Bild entschlüsselt wurde und getRGB unabhängig vom Quellformat ist. – Elemental