Ich schreibe an Java-Applets für Fraktale (Apfelmännchen und Ähnliche). Erst hatte ich das Problem, daß sie sich nicht sauber schließen lassen, weil sie ständig zu 100% den PC auslasten, weil alles von paint() aus gesteuert wird (andernfalls kommen Bilder und Rechnugen durcheinander) und nie fertig wird. Da hatte ich die Bildausgabe pixelweise mit <br>
g.setColor(new Color(coR[icf], coG[icf], coB[icf])); <br>
g.drawLine(x,y,x,y);<br>
wobei die Arrays coR[] usw. die 3 RGB-Farbanteile einer Farbtabelle sind, die vorher ausgerechnet bzw. in der Parameterliste ausgewählt wurde. Das icf ist sozusagen nur ein Grauwert (0..255), den das Iterationsprogramm als Ergebnis abgegeben hat. Das funktioniert bzgl. Farbe wie es soll.
Die Bilder kamen relativ flott an, aber mit dem Nachteil, daß anschließend der Browser blockiert, man muß ihn erst vollkommen schließen, um ihn weiterzubenutzen. (Anzusehen unter http://www.webstickers.de, dort bei Fraktale am besten die Minis). <br>
Es fehlten Threads. Das Übliche mit (Thread.sleep(10) dabei) usw. half nicht zuverlässig, weil immernoch zulange ohne Unterbrechung iteriert werden mußte. Die übrigen Programme (außer Fraktale) bei webstickers.de sind da schneller und so etwas sicher bzgl. Schließen. <br>
Nun habe ich auf image-Bildausgabe umgestellt. Seitdem sind 2 Probleme offen: <br>
a)Die Zeit hat sich vervierfacht, bis das nächste Bild kommt. <br>
b)Es kommt immer nur die default-Farbtabelle, nicht meine.
<b>Die Methode beginnt mit </b>
Image calculate() { <br>
Thread me = Thread.currentThread(); <br>
int alpha = 255, argb; <br>
Color colorfract; <br>
BufferedImage img = new BufferedImage(ixe,ixe,BufferedImage.TYPE_INT_ARGB) ; <br>
ColorModel colModel = img.getColorModel(); <br>
WritableRaster raster = img.getRaster(); <br>
Color color; <br>
<b>und endet mit: </b>
color = new Color(colR[icf], colG[icf], colB[icf]); <br>
argb = color.getRGB(); <br>
Object colData = colModel.getDataElements(argb,null); <br>
raster.setDataElements(ix,iy,colData); <br>
} // Ende for ix <br>
}; // Ende for iy <br>
if (runner != me) <br>
return null; <br>
return img; <br>
} // Ende Image calculate <br>
Das steht so ähnlich bei Core Java2 Bd.1 Seite 604. <br>
Der Rest(Threads, run(), paint()) ist wie bei DitherTest.java aus den Demos vom jdk.
Weiß jemand, wie ich die Default-Tabelle loskriege ? <br>
Und: Warum ist das Programm jetzt so entsetzlich langsam ?
Herzliche Grüße <br>
Gabi
g.setColor(new Color(coR[icf], coG[icf], coB[icf])); <br>
g.drawLine(x,y,x,y);<br>
wobei die Arrays coR[] usw. die 3 RGB-Farbanteile einer Farbtabelle sind, die vorher ausgerechnet bzw. in der Parameterliste ausgewählt wurde. Das icf ist sozusagen nur ein Grauwert (0..255), den das Iterationsprogramm als Ergebnis abgegeben hat. Das funktioniert bzgl. Farbe wie es soll.
Die Bilder kamen relativ flott an, aber mit dem Nachteil, daß anschließend der Browser blockiert, man muß ihn erst vollkommen schließen, um ihn weiterzubenutzen. (Anzusehen unter http://www.webstickers.de, dort bei Fraktale am besten die Minis). <br>
Es fehlten Threads. Das Übliche mit (Thread.sleep(10) dabei) usw. half nicht zuverlässig, weil immernoch zulange ohne Unterbrechung iteriert werden mußte. Die übrigen Programme (außer Fraktale) bei webstickers.de sind da schneller und so etwas sicher bzgl. Schließen. <br>
Nun habe ich auf image-Bildausgabe umgestellt. Seitdem sind 2 Probleme offen: <br>
a)Die Zeit hat sich vervierfacht, bis das nächste Bild kommt. <br>
b)Es kommt immer nur die default-Farbtabelle, nicht meine.
<b>Die Methode beginnt mit </b>
Image calculate() { <br>
Thread me = Thread.currentThread(); <br>
int alpha = 255, argb; <br>
Color colorfract; <br>
BufferedImage img = new BufferedImage(ixe,ixe,BufferedImage.TYPE_INT_ARGB) ; <br>
ColorModel colModel = img.getColorModel(); <br>
WritableRaster raster = img.getRaster(); <br>
Color color; <br>
<b>und endet mit: </b>
color = new Color(colR[icf], colG[icf], colB[icf]); <br>
argb = color.getRGB(); <br>
Object colData = colModel.getDataElements(argb,null); <br>
raster.setDataElements(ix,iy,colData); <br>
} // Ende for ix <br>
}; // Ende for iy <br>
if (runner != me) <br>
return null; <br>
return img; <br>
} // Ende Image calculate <br>
Das steht so ähnlich bei Core Java2 Bd.1 Seite 604. <br>
Der Rest(Threads, run(), paint()) ist wie bei DitherTest.java aus den Demos vom jdk.
Weiß jemand, wie ich die Default-Tabelle loskriege ? <br>
Und: Warum ist das Programm jetzt so entsetzlich langsam ?
Herzliche Grüße <br>
Gabi
Comment