schnell malen

thomy800

Erfahrenes Mitglied
hi
ich bin dabei eine malroutine zu schreiben. dafür möchte ich einzelne pixel malen.
in der graphics hab ich sowas aber nicht gefunden, daher habe ich drawline(x,y,x,y) verwendet (malt eine linie auf nur einem pixel). das problem ist nur, dass das seeeehr langsam ist.
(also drawline(x1,y1,x2,y2) ist sehr viel schneller, als wenn ich das mit einer for-schleife mache, wo ich die pixel dazwischen einzeln male)

hat jemand eine idee wie ich das am schnellst möglichen hinbekomme?

mfg thomy
 
Wie schnell diese Variante ist, weiß ich nicht, aber einen Versuchs ists wert: setz Deine Pixel in einem entsprechenden Array, mit welchem Du dann über die Klasse MemoryImageSource ein Bild erzeugst.
 
hm.. ich wollte das gerade vom zeitverhalten testen, aber mir tritt da schon vorher ein komischer fehler auf.
ich verwende das 1. bsp. von http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/MemoryImageSource.html
und sieht dann so aus:

Java:
import java.awt.*;
import java.awt.image.*;

public void draw(Graphics g) {
        int w = breite;
        int h = hohe;
        int pix[] = new int[w * h];
        int index = 0;
        for (int y = 0; y < h; y++) {
            int red = (y * 255) / (h - 1);
            for (int x = 0; x < w; x++) {
                int blue = (x * 255) / (w - 1);
                pix[index++] = (255 << 24) | (red << 16) | blue;
            }
        }
        Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));
        g.drawImage(img,0,0, null);
    }

der compiler zeigt mir in zeile " Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));" den fehler an, dass er die methode createImage(MemoryImageSource) nicht finden kann...

wenn ich aber von seite http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter11/pixelHandling.html
das erste bsp. übernehme(also exakt kopiere), wo auch die selbe methode verwendet wird, wird mir kein fehler angezeigt.

woran kann das liegen?
 
Die Methode createImage kommt von Component. In dem Beispiel steht dir die Methode zur Verfügung da JPanel erweitert wird welches wiederum diese Methode von Component erbt.
 
thx.
hab also ein panel erstellt und verwende über diesen createImage.
habs getestet, zeitverhalten ist nicht besonders gut: 16 Bilder/sek. normal wäre 50-60 Bilder...

falls es jemanden interessiert, ich habe aber was anderes in diese richtung gefunden:

Java:
        BufferedImage doubleBuffer = new BufferedImage(breite,hohe,BufferedImage.TYPE_USHORT_565_RGB);
        DataBuffer dest =doubleBuffer.getRaster().getDataBuffer();
        short[] doubleBufferData = ((DataBufferUShort)dest).getData();

doubleBufferData[y*breite+x]= eine farbe (short)

durchschnittlich 50-60 Bilder/sek :)
(man kann auch statt ushort int verwenden)
 
Zuletzt bearbeitet:
Zurück