großzügiges Pixelraster über Bildschirm legen

berndoa

Top Contributor
Hallo,
ich hab ein schon älteres Programm bei dem ich mittels Robot auf schätzungsweise 10 verschiedene Buttons auf dem Bildschirm klicke.
Oer DOM da was zu erreichen geht leider nicht (aus dem Source Code weiß ich dass da nur eine Canvas drauf ist, die von einem Javascript Code geändert wird. Kann also die Buttons nicht direkt ansteuern),
daher muss ich wohl oder übel händisch die Position jedes Buttons ablesen und auf die (x,y) Koordinate klicken lassen.
Was etwas nervig ist wenn ich bspw. auf meinen Computer, Browser und Co. das Skript ausgerichtet habe und dann das Programm woanders nutzen will.
Denn da wird ja durch Auflösung und Co. das wieder anders sein und die Buttons an anderen Positionen sein.

Um mir bei einem Übergang das Leben leichter zu machen, würde ich mir gerne eine Art Raster über den Bildschirm legen um wenigstens einfach die Koordinaten ablesen zu können.

Ich stelle mir das recht simpel vor:
Bei x=10,20,30,..., 10*k Pixel wird jeweils eine senkrechte Linie gezogen.
Und entsprechend bei den y=10*k Pixel werden entsprechend waagrechte Linien gezogen.
Dann ist Alles auf dem Bildschirm zumindest einem 10x10 Pixel Quadrat zuzuordnen.
Und wenn ich halt bspw. sehe dass ein button seinen Mittelüunkt so grob oben links im betreffenden Quadrat hat, dann wird die Positione sowas wie (13,22) oder so sein.

Ich schätze dann halt die Position, auf absolute Präzision kommt es nicht an, 2-3 Pixel Abweichung sind locker verkraftbar.

Aber ja, so würde ich gerne in bspw. 10 pixel Abstand gerne senkrecht und waagrecht Linien über den Bildschirm zeichnen, natürlich ideallerweise dass jede 50 pixel Linie ne Beschriftung hat oder so.

Koordinatensystem halt, im Prinzip, nur nicht so hohe Präzision.

Läst sich sowas mit Java Quick and Dirty umsetzen?
Geht nur drum dass ich es drüberlege, vll. Scree nshot des Ganz mache und in aller Seelenruhe dann alle Positionen ablesen kann die ich brauche :)
 

berndoa

Top Contributor
Hallo,
ich hab ein schon älteres Programm bei dem ich mittels Robot auf schätzungsweise 10 verschiedene Buttons auf dem Bildschirm klicke.
Oer DOM da was zu erreichen geht leider nicht (aus dem Source Code weiß ich dass da nur eine Canvas drauf ist, die von einem Javascript Code geändert wird. Kann also die Buttons nicht direkt ansteuern),
daher muss ich wohl oder übel händisch die Position jedes Buttons ablesen und auf die (x,y) Koordinate klicken lassen.
Was etwas nervig ist wenn ich bspw. auf meinen Computer, Browser und Co. das Skript ausgerichtet habe und dann das Programm woanders nutzen will.
Denn da wird ja durch Auflösung und Co. das wieder anders sein und die Buttons an anderen Positionen sein.

Um mir bei einem Übergang das Leben leichter zu machen, würde ich mir gerne eine Art Raster über den Bildschirm legen um wenigstens einfach die Koordinaten ablesen zu können.

Ich stelle mir das recht simpel vor:
Bei x=10,20,30,..., 10*k Pixel wird jeweils eine senkrechte Linie gezogen.
Und entsprechend bei den y=10*k Pixel werden entsprechend waagrechte Linien gezogen.
Dann ist Alles auf dem Bildschirm zumindest einem 10x10 Pixel Quadrat zuzuordnen.
Und wenn ich halt bspw. sehe dass ein button seinen Mittelüunkt so grob oben links im betreffenden Quadrat hat, dann wird die Positione sowas wie (13,22) oder so sein.

Ich schätze dann halt die Position, auf absolute Präzision kommt es nicht an, 2-3 Pixel Abweichung sind locker verkraftbar.

Aber ja, so würde ich gerne in bspw. 10 pixel Abstand gerne senkrecht und waagrecht Linien über den Bildschirm zeichnen, natürlich ideallerweise dass jede 50 pixel Linie ne Beschriftung hat oder so.

Koordinatensystem halt, im Prinzip, nur nicht so hohe Präzision.

Läst sich sowas mit Java Quick and Dirty umsetzen?
Geht nur drum dass ich es drüberlege, vll. Scree nshot des Ganz mache und in aller Seelenruhe dann alle Positionen ablesen kann die ich brauche :)
Ich habe nochmal überlegt was konkret zu tun wäre:
1) Screenshot mit java machen und mal als jpg oder so speichern.
2) jenes jpg wie folgt bearbeiten:
wenn wir die realen bildschirmlänge/breite mittels Toolkit.getDefaultToolkit().getScreenSize() haben und auch die "länge und breite" des bildes wissen (also von was bis was die koordinaten des bildes gehen),
dann kann man ja jede reale bildschirmkoordinate in eine bildkoordinate umrechnen.
dementsprechend lässt sich ein "zeichen eine linie von (10,0) bis (10,855) auf dem bildschirm" umrechnen in ein entsprechendes kommando um eine passend elinie auf dem bild zu zeichnen.

also entsprechende umrechnung von bildschirm zu bildkoordinaten machen und so linien auf dem bild einzeichnen wie sie in "real" 10 pixel voneinander entfernt wären.

Frage ist nur:
1. wie zeichne ich generell mit java einfach einem gegebenen jpg linien und punkte ein?
2. wie komme ich praogrammiertechnishc an die "dimensionen" der bilddatei, also die dimensionen der bildfläche die ich sehen würde wenn ich das bild in paint aufmachen würde?

wenn ich die 2 sachen wüsste, könnte ich das umsetzen.

Gut, die 50 pixel abstandsmarkierungen ins bild schreiben ist sicherlich auch irgendwie machbar.
 

mihe7

Top Contributor
Warum kein transparentes Window über den ganzen Bilschirm legen, per Maus ein Rechteck ziehen und die Koordinaten ausgeben?
 
Y

yfons123

Gast
du kannst über F12 im browser dir die elemente ausgeben lassen in welcher position diese im DOM sind
zb
div1.div2.canvas3
dann lässt du dir zb durch javafx webview dir eine ansicht bauen ( muss ja nicht sichtbar sein ) oder anders
und dann von deiner gebauten ansicht sagst du "gib mir canvas3 koordinaten" da deine ansicht immer passend ist und nicht vom browser abhängig ist könnte es vllt so funtkionieren
 

berndoa

Top Contributor
Ich habe mir mal ein Proramm zusammengebaut, das soweit ich sehe bisher mal meine Zwecke erfüllt:


Java:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

import java.awt.Dimension;
import java.awt.Toolkit;
// importing Java AWT class 
import java.awt.*;   


public class DrawTest{
    
    int rewidth=0;
    int reheight=0;
    int imwidth=0;
    int imheight=0;
    int griddist=20;
    
    public DrawTest(){
        
        Dimension size=Toolkit.getDefaultToolkit().getScreenSize();   
    
        // getWidth() method returns the imheight of the screen
        rewidth = (int)size.getWidth();
        // getHeight() method returns the imheight of the screen
        reheight = (int)size.getHeight();
        
        try{
            // the line that reads the image file
            BufferedImage mazeImage = ImageIO.read(new File("C:/Users/d-sch/Desktop/Tesseract Kram/inputpic2.jpg"));

            

            imwidth          = mazeImage.getWidth();
            imheight         = mazeImage.getHeight();

            System.out.println("(imwidth,imheight)= ("+imwidth+","+imheight+");"+"(rewidth,reheight)= ("+rewidth+","+reheight+");");
            
            
            Graphics2D g2d = mazeImage.createGraphics();
            g2d.setColor(Color.BLACK);
            BasicStroke bs = new BasicStroke(2);
            g2d.setStroke(bs);
            g2d.setPaint(Color.BLACK);
            g2d.setFont(new Font("TimesRoman", Font.PLAIN, 18));
            
            
            g2d.fillRect(reToimX(0),reToimY(0), reToimX(rewidth), reToimY(9+griddist));
            g2d.fillRect(reToimX(0),reToimY(0), reToimX(9+griddist), reToimY(reheight));

                                                        
            // draw the black vertical and horizontal lines
            //vertical lines
            for(int x=9;x<rewidth;x=x+griddist){
                g2d.setPaint(Color.BLACK);
                g2d.drawLine(reToimX(x),reToimY(1),reToimX(x),reToimY(reheight-1));
                System.out.println("x-linie bei "+x);
                if((x%(2*griddist))==9){
                    g2d.setPaint(Color.WHITE);
                    g2d.drawString(""+x, reToimX(x-1), reToimY(9+griddist));
                }
            }
            
      g2d.setPaint(Color.WHITE);
            //horizontal lines
            for(int y=9;y<reheight;y=y+griddist){
                g2d.setPaint(Color.BLACK);
                g2d.drawLine(reToimX(1),reToimY(y),reToimX(rewidth-1),reToimY(y));
                System.out.println("y-linie bei "+y);
                if((y%(2*griddist))==9){
                    g2d.setPaint(Color.WHITE);
                    g2d.drawString(""+y, reToimX(5), reToimY(y-1));
                }
            }
            
            
            /*
            for(int i=0;i<21;i++){
             g2d.drawLine((imgDim.width+2)*i, 0, (imgDim.width+2)*i,  imgDim.height-1);
             g2d.drawLine(0, (imgDim.height+2)*i, imgDim.width-1, (imgDim.height+2)*i);
            }
            */
            
            File outputfile = new File("output.jpg");
            ImageIO.write(mazeImage, "jpg", outputfile);
        
        }
        catch(Exception e){}
    
        
    }
    
    public static void main (String[] args){
        DrawTest part=new DrawTest();
    }
    
    public int reToimX(int rex){
        int x=(int)((1.0*rex/rewidth)*imwidth);
        return x;
    }
    
    public int reToimY(int rey){
        int y=(int)((1.0*rey/reheight)*imheight);
        return y;
    }


    
}

Scheint es auf den ersten Blick mal soweit zu tun.
Ich mache einen Screenshot, lasse das programm laufen und erhalte mein Bild mit dem Raster drüber :)

Kann ich dann in aller Seelenruhe die Koordinaten bildlich ablesen.
Hofe nur dass die Umrechnung von "realen" koordinaten in Bildkoordinaten so richtig ist :-/
 

berndoa

Top Contributor
du kannst über F12 im browser dir die elemente ausgeben lassen in welcher position diese im DOM sind
zb

dann lässt du dir zb durch javafx webview dir eine ansicht bauen ( muss ja nicht sichtbar sein ) oder anders
und dann von deiner gebauten ansicht sagst du "gib mir canvas3 koordinaten" da deine ansicht immer passend ist und nicht vom browser abhängig ist könnte es vllt so funtkionieren
womit genau meisnt du da, dass ich das ablesen könnte?

konkret würde ich bspw. auf einer Seite vom online roulette wie dieser:

gerne wissen an welcher Position (idealerweise gleich mit eingerechneter bildschirmskalierung)
sich bspw. die 28 befindet, wo deren Mittelpunkt so ist.

Bisher komme oich beim Objekte "Untersuchen" nur soweit dass das Ganze Teil da eine riesige Canvas ist.
Aber komme nicht explizit an die einzelne Rot, Null, Drehen, etc. Taste dran :-/
 

Oneixee5

Top Contributor
Canvas ist ein grafisches Element, wie ein Bild. Es hat aber weitere Eigenschaften, mit denen man darauf zeichnen oder Events verarbeiten kann. Ein Canvas existiert zwar im DOM aber stellt selbst keine Elemente für DOM zur Verfügung.
Ich könnte mir ein Browser-Plugin vorstellen, wenn das "älteres Programm" ein Browser ist bzw. einbindet. Diese stellt dann alle Informationen z.B.: per localhost - REST bereit. Diese Infos könnte dann eine Anwendung nutzen. In den Infos könnten dann u.a. Position und Größe des Browsersfensters enthalten sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen GlassPane über JScrollPane legen Java Basics - Anfänger-Themen 6
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
S Java über SSH Java Basics - Anfänger-Themen 13
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
W char über die Konsole? Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
A Array Ansprache einer Zelle über Punktnotation? Java Basics - Anfänger-Themen 3
O Java über cmd benutzen ? Java Basics - Anfänger-Themen 5
J Variablenzugriff über string Java Basics - Anfänger-Themen 18
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
G Arraynamen über eine Schleife ansprechen Java Basics - Anfänger-Themen 4
S Bild über JButton legen Java Basics - Anfänger-Themen 3
temi Druckeransteuerung über ESC-Sequenz Java Basics - Anfänger-Themen 21
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8
T CMD über Java-Programm aufrufen Java Basics - Anfänger-Themen 2
X Finde die Files über FTP nicht Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
P Programm kann über CMD nicht ausgeführt werden Java Basics - Anfänger-Themen 2
E Frage über Speichern und Ausgabe Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
A .jar über Webbrowser aufrufen Java Basics - Anfänger-Themen 2
D Ausgabe über JLabel Java Basics - Anfänger-Themen 12
L Erste Schritte Arrays über eine for Schleife ansprechen. Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
F Gewichteter Mittelwert über eine Zeitperiode Java Basics - Anfänger-Themen 3
B Schleife über einen Container Java Basics - Anfänger-Themen 7
Henri Paare Frage über Java Programmierung Java Basics - Anfänger-Themen 10
T jar von stick aus über jre auf stick starten Java Basics - Anfänger-Themen 6
L Iterieren über ArrayList Java Basics - Anfänger-Themen 1
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
F Methoden aus anderer classe über nehmen Java Basics - Anfänger-Themen 10
N .propertiesdatei über Relativen Pfad einlesen lassen Java Basics - Anfänger-Themen 5
G Input/Output CSV-Datei über Java-Programm erstellen, Zeichensalat Java Basics - Anfänger-Themen 3
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben