2017-01-15 7 views
1

Ich schreibe gerade eine Bibliothek für ein LCD. Ich entschied mich dafür, die Klasse Graphics in Java zu erweitern, damit die Benutzer bequemer zum LCD zeichnen können.Implementierung der Klasse java.awt.Graphics

Allerdings sind das Schreiben/Überschreiben dieser Methoden sehr anstrengend. Ich habe gerade drawLine() mit dem Bresenham-Linienalgorithmus und fillRect(),clearRect() erfolgreich implementiert, indem ich die Pixel mit Schwarz und Weiß gefüllt habe. Aber es scheint, dass es mich fast getötet hat.

Ich habe einen Blick mit der original implementation mit der Grafikklasse: Nun, es ist abstrakt. Nichts ist implementiert XD

Auch keine Hoffnung mit dem Swing. Die Implementierung scheint plattformabhängig zu sein.

Gibt es Quellen mit der Graphics-Klasse, so dass ich einen Blick auf die Implementierung werfen kann?

Oder ist das wirklich eine dumme Arbeit zu tun?

+0

, wenn Sie * sagen „SEHR schwere Arbeit“ * Was meinen Sie schwer in Bezug auf den Code oder die Leistung zu schreiben, oder was? – nullpointer

+0

anstrengend, und erfordert hohe Konzentration auf Pixel ... – mob41

Antwort

0

Ich würde ein Bild in die Implementierung der Grafikklasse setzen. Und nutzen Sie die Grafik die getGraphics mit() und haken die Methoden in es

public SampleGraphics extends Graphics2D{ 

    private final Graphics2D g2d; 

    private final BufferedImage buffImg; 

    public SampleGraphics(String someargs){ 
     //Perform things... 
     buffImg = ..... 
     g2d = buffImg.getGraphics(); 
    } 

    @Override 
    public Graphics create(){ 
     return g2d.create(); 
    } 

    //...each method identical to the Graphics2D g2d 
} 
0

Sie finden verschiedene Implementierungen der Klasse Graphics in der vollständigen OpenJDK-Java-Quellstruktur, die Sie von der offiziellen openjdk-Site erhalten können. Werfen Sie einen Blick auf die Download-Seite Java 8 Source Code.

Egal wie Sie es tun, eine neue Graphics Klasse zu implementieren wird eine Menge Arbeit sein. Aber ich bin nicht bereit zu sagen, dass es eine "dumme" Sache ist. Es hängt davon ab, warum Sie es tun; d. h. ob die Anstrengung "gut ausgegeben" wird. Nur Sie können diesen Anruf tätigen.

+0

Können Sie einen angeben? Abstrakte Klassen werden nicht helfen. – mob41

+0

Nicht von ganz oben. Wenn Sie jedoch den vollständigen Quellcode herunterladen, finden Sie Beispiele. (Ich habe keine Kopie auf dem Gerät, das ich gerade benutze.) –

0

Seine ziemlich dumme Arbeit zu tun.

  • Es ist schon fertig.

  • Wenn Sie Pixel für Pixel arbeiten, arbeiten Sie auf dem falschen Level.

  • Aus Gründen der Perfomance sollte dies über die Hardwarebeschleunigung geschehen, wenn möglich mit openGL.

  • Auch wenn nicht, sollte es gemacht werden, indem man in C herunterfährt und direkt auf VRAM zugreift, nicht auf Java-Ebene. Wenn Sie einen Bildschirm auf Schwarz setzen, wird 1 Anruf in das Memset übernommen.

+0

Die Bibliothek schreibt direkt in den LCD-Framebuffer. Und OpenGL ist meistens nicht möglich, da das LCD einen alternativen Weg benutzt, Pixel mit 0,1 zu füllen. Haben Sie jemals das ev3dev-Projekt gehört? Ich benutze das LCD mit dem ev3dev. – mob41

+0

Dann würde ich es immer noch nicht von Grund auf machen, ich würde eine Implementierung finden und den Pixelschreibvorgang ändern. Zum Beispiel http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/java2d/SunGraphics2D.java?av = h # SunGraphics2D –

+0

Ich sah den Code durch die Nacht. Ich kann die Methode zum Ändern des Pixelschreibvorgangs nicht finden. Die '' 'RenderingEngine''' stammt von der nativen Seite (closed source). Scheint, ich muss von Grund auf neu machen. – mob41

Verwandte Themen