Screenshot auf bestimmtes Teilbild untersuchen

FawKes100

Aktives Mitglied
Hallöchen,
ich habe ein Programm, welches einen Screenshot machen soll und dieses auf ein bestimmtes Bild, welches in dem Screenshot auch vorkommt. Nun ist das Problem allerdings, dass dieses Teilbild nicht genauso groß ist wie das gesamte Bild. Zunächst einmal lasse ich alle Pixel in die rgb-Werte zerlegen:
Java:
for(int i=0; i<zBreite; i++)
            {
                for(int j=0; j<zHoehe; j++)
                {
                    int rgb = screen.getRGB(i, j);
                    Color color = new Color(rgb);
                    red[i][j] = color.getRed();
                    blue[i][j] = color.getBlue();
                    green[i][j] = color.getGreen();
                }
            }
Doch wie gehe ich da jetzt jeweils durch und überprüfe ob das Bild vorhanden ist? Würde theoretisch das Bild in 36*23 Teile aufteilen (da so großn auch der Teilbereich der im Bild gesucht werden soll ist) und überprüfen ob ein Teil identisch ist. Hierzu hatte ich überlegt eine Image Klasse zu schreiben, wo das Bild jeweils ein zweidimensionales Array von den RGB werten beinhaltet. Von dieser Klasse würde ich dann ebenfalls wieder ein zweidimensionales Array bilden. Doch wie schreibe ich das mit den Schleifen auf? Theoretisch bräuchte ich doch ne 4-Fache ForSchleife oder? Allerdings bekomme ich mit folgendem Programmiercode ab der 31. Spalte eine ArrayIndexOutOfBoundsException
Java:
int[][] red = new int[zBreite][zHoehe];
            int[][] green = new int[zBreite][zHoehe];
            int[][] blue = new int[zBreite][zHoehe];
           
            for(int i=0; i<zBreite; i++)
            {
                for(int j=0; j<zHoehe; j++)
                {
                    int rgb = screen.getRGB(i, j);
                    Color color = new Color(rgb);
                    red[i][j] = color.getRed();
                    blue[i][j] = color.getBlue();
                    green[i][j] = color.getGreen();
                }
            }
           
            int rot[][] = new int[zHeight][zWidth];
            int gruen[][] = new int[zHeight][zWidth];
            int blau[][] = new int[zHeight][zWidth];
           
            for(int a=0; a<zeilen; a++)
            {
                for(int b=0; b<spalten; b++)
                {
                    for(int i=0; i<zHeight; i++)
                    {
                        for(int j=0; j<zWidth; j++)
                        {
                            if(a!=0 && b!=0)
                            {
                                rot[i][j] = red[a*i][b*j];
                                gruen[i][j] = gruen[a*i][b*j];
                                blau[i][j] = blue[a*i][b*j];
                            }
                            else if(a==0 && b==0)
                            {
                                rot[i][j] = red[i][j];
                                gruen[i][j] = gruen[i][j];
                                blau[i][j] = blue[i][j];
                            }
                            else if(a!=0 && b==0)
                            {
                                rot[i][j] = red[i*a][j];
                                gruen[i][j] = gruen[i*a][j];
                                blau[i][j] = blue[i*a][j];
                            }
                            else if(a==0 && b!=0)
                            {
                                rot[i][j] = red[i][j*b];
                                gruen[i][j] = gruen[i][j*b];
                                blau[i][j] = blue[i][j*b];
                            }
                        }
                    }
                }
            }
Der Fehler passiertder letzten Möglichkeit:
Java:
else if(a==0 && b!=0)
                            {
                                rot[i][j] = red[i][j*b];
                                gruen[i][j] = green[i][j*b];
                                blau[i][j] = blue[i][j*b];
                            }

Oder ist es sogar ohne diese komplexe Logik von Schleifen möglich ein BufferedImage in mehrere gleichgroße Teile aufzuteilen, bevor die RGB Werte in Arrays abgespeichert werden etc.?
 

FawKes100

Aktives Mitglied
Okay, das sieht nach verdammt viel Mathematik aus :D
Der Vorgang der hier beschrieben wird, ähnelte ja auch grundlegend meiner Idee das Bild stück für stück zu durchwandern...
Für Python stehen bei dem zweiten Link bereits die Methode (oder wie man das da nennt), die die Funktion bilden würde. Das bedeutet nun, dass ich zu erst einmal die Klasse schreiben müsste, die diese Funktionen berechnen kann?
Zusätzlich ist beim ersten Link noch Code mit beigefügt, doch welcher Programmiersprache entspricht dieses? Wenn ich die Seite richtig verstanden habe, müsste ich den Code nur nach Java transportieren, aber ich glaube kaum dass das so einfach ist..
 
X

Xyz1

Gast
Zweitere "Methoden" sind glaube ich für Python: https://docs.opencv.org/trunk/d4/dc6/tutorial_py_template_matching.html
Ersteres bezieht sich auf die Java Lib von OpenCV (BTW die ist nebenbei über 100 MB groß, ich habe das irgendwann einfach gelassen...)
Allerdings alles nach "Code at glance:" ist Hardcore C/C++ Code (Namensräume usw. deuten darauf hin)
ja prinzipiell wird das Quellbild "irgendwie" durchlaufen/iteriert. danach wird es vermutlich auf das template hin untersucht.
wann, wo und vor allem wie du diese Funktionen und Klassen schreiben müsstest, kann ich dir nicht beantworten. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Methoden Farbe auf Screenshot suchen Allgemeine Java-Themen 2
T Screenshot -Bereich auswählen Allgemeine Java-Themen 2
U Screenshot erstellen und speichern Allgemeine Java-Themen 6
K Screenshot mit Maus Allgemeine Java-Themen 2
Z Desktop anzeigen + Screenshot klappt nicht Allgemeine Java-Themen 3
F Screenshot von gewissen Anwendungen nicht möglich Allgemeine Java-Themen 5
Developer_X ScreenShot erstellen Allgemeine Java-Themen 8
J Screenshot von Websites? Allgemeine Java-Themen 3
Steev Screenshot vom Bereich behind dem aktuellen Fenster machen Allgemeine Java-Themen 24
P Screenshot in Java Allgemeine Java-Themen 53
G Screenshot mittels robot ausführen Allgemeine Java-Themen 4
MQue Screenshot Allgemeine Java-Themen 4
U Java Screenshot Alt+druck Allgemeine Java-Themen 3
T Screenshot ohne meinem Programm Allgemeine Java-Themen 5
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
N Überprüfung ob ein bestimmtes Zeichen <1 mal vorkommt Allgemeine Java-Themen 2
I PrinterJob - bestimmtes Druckerfach festlegen möglich? Allgemeine Java-Themen 2
M Ein bestimmtes Wort in einem Text zählen (String in String) Allgemeine Java-Themen 9
Zettelkasten Aus String bestimmtes Zeichen herausfinden Allgemeine Java-Themen 19
B Tabelle. bei Wertänderung was bestimmtes machen Allgemeine Java-Themen 3
M wie warte ich auf ein bestimmtes Ereignis Allgemeine Java-Themen 6
X Bestimmtes Muster in Textdatei verändern Allgemeine Java-Themen 13
T bestimmtes wort aus string lesen Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben