# Graphics Klasse



## pornopizza (6. Nov 2007)

Hallo erstmal,

ich bin ein wenig am zögern inwiefern die Graphics Klasse benutzbar is und inwiefern man sich evtl eine eigene schreiben kann.
Was ich für Probleme mit der Graphics Klasse habe:
Die Graphics Klasse von sun malt keine Punkte(klar, man kann ein Rechteck malen mit breite und höhe 1 aber das ist ja vermutlich ne ganze ecke langsamer als einen punkt zu malen)

Was aber viel schlimmer ist bzw eigentlich mein Hauptproblem: ich kann keine Pixel an bestimmten Stellen lesen. Wenn das ginge, könnt ich über die anderen Probleme gut hinwegsehen. Oder kann man das doch und ich weiß nichts davon? Graphics2D kann das soweit ich das weiß ja auch nicht.

Macht es Sinn eine eigene graphics Klasse zu schreiben, die einfach farbwerte in nem array speichert(am besten gleich gar ned mit Color arbeiten, weil man da ja ständig am Objekte erzeugen ist, sobald man neue Farben braucht). Dann würde ich die benutzen und erst zum Schluss zum alles wieder in ein Graphikobjekt zeichnen? Das mag umständlich klingen aber bei einer großen Menge von Berechnungen ist das doch vielleicht sogar schneller.

Wie löst man das Problem am besten, dass man keine pixel lesen kann? Und wie macht man das mit der Ausgabe dann am geschicktesten, wenn man eine eigene graphics Klasse nutzt?

Gruß
porno


----------



## Marco13 (6. Nov 2007)

Hm. Eine eigene Graphics-Klasse klingt gewagt - und spontan würde ich sagen, dass das "quasi unmöglich" ist. Man bekommt (z.B. bei einem Aufruf von paintComponent(..)) ja ein Graphics-Objekt sozusagen(!!!) "vom Betriebssystem" - wie und wo man da seine eigene Implementierung einschleusen sollte, ist mir schleierhaft.

Ein möglicher ansatz wäre wohl, alles, was gezeichnet werden soll, in das Graphics-Objekt zu zeichnen, das man von einem BufferedImage bekommt (quasi double-buffering par Hand). Das BufferedImage erlaubt ja dann das Setzen und Auslesen einzelner Pixel.... Etwa(!) so....

```
class Foo extends JPanel
{
   private BufferedImage image = ...

   public void paintComponent(Graphics g)
   {
       Graphics2D bg = image.createGraphics();
       super.paintComponent(bg);

       image.setRGB(....);
       int rgb = image.getRGB(...);
 
       g.drawImage(image, 0,0,this);
    }
}
```


----------



## pornopizza (6. Nov 2007)

Klingt gut, versuche ich mal gerade, melde mich dann wieder

Mit eigener grafikklasse meinte ich eigentlich auch nur ein Objekt, dass die pixelfarben speichert. dann müsste man den ganzen kram nachher natürlich wieder in ein grafikobjekt vom typ Graphics schreiben(ziemlich verschwenderisch^^)


----------



## pornopizza (6. Nov 2007)

Ok funktioniert. Is aber irgendwie tierisch umständlich gemacht wie ich finde. Naja gut kann man ja vereinfachen, wenn man das BufferedImage extended. Vielen Dank =)


----------

