ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
640
640
EMPFEHLEN
-
22.09.10 10:22 #1
- Registriert seit
- Sep 2010
- Beiträge
- 2
Hallo,
ich habe ein Problem bei meinem Programm.
Und zwar habe ich ein boolean Array in dem ich Berechnungen von geometrischen ausgefüllten Formen mache. Die Formen sind beispielsweise Rechtecke, Dreiecke, Kreise aber auch Kurven von Graphen usw.
Dieses Array ist genauso groß wie meine canvas in der gui -> new array[canvas.getWidth()][canvas.getHeight()].
Das Problem ist ich will das Array halt schwarz/weiß (von daher könnte das Array auch ein byte oder int Array sein) auf die Canvas zeichnen. Ich möchte aber nicht durch das gesamte Array iterieren, da dies bei einem z.B. 1000*768 großen Array eine ziemlich schlechte laufzeit hätte. Oder wie seht ihr das?
Kennt jemand eine Möglichkeit wie ich so ein Array sonst auf die Canvas zeichnen kann?
Danke schoneinmal für Antworten,
Markus
-
22.09.10 14:00 #2
Ich weiß zwar nicht, was die anderen so sagen werden, aber ich würde vorschlagen, dass du das ganze ein wenig komprimierst. Eine wohl sehr einfache Möglichkeit wäre z.B. sowas:
b und w stehen halt für black und white und die Zahl davor eben für die Anzahl der Pixel in der Farbe. Wie du das auf deine Sache überträgst, ist dir überlassen, kannst wieder ein zweidimmensionales Array anlegen, kannst aber auch nur ein Array für die Zeilen und den komprimierten Kram als String eintragen, musst dann dannach eben zusehn, wie du die Bestandteile wieder auseinander bekommst.Code :1
2b30w100b2w
Was vielleicht auch etwas zur Geschwindigkeit beitragen würde, wäre zu wissen, welche der beiden Farben den größten Anteil hat. Sprich wenn z.B. schwarz etwa 70% der Fläche einnimmt, dann kann man das ganze Canvas einfach in schwarz einfärben und dann mit weiß nur die paar Stellen übermalen lassen.Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
22.09.10 22:31 #3
- Registriert seit
- Sep 2010
- Beiträge
- 2
danke, das klingt schonmal nicht schlecht
aber ich ich muss mal gucken wie genau ich das umsetzen könnte...
Gibt es denn nicht vielleicht eine Möglichkeit ein Bild aus dem Array zu erstellen und das einfach zu zeichnen, oder sowas in der Art?
-
24.09.10 22:27 #4
Sicher kannst du ein Bild aus den Bytes zusammenbauen und dann zeichnen lassen. Such dir ein Format aus und baue es nach. Ob es dann klappt, ist natürlich eine andere Sache. Ich habe mal versucht mir ein Bild durch Bytes zusammen zu bauen, halt im PNG-Format, leider lief das nicht so ganz, wie ich das wollte. Ich weiß auch gar nicht mehr warum ich das gemacht habe, aus irgendeinem Grund wollte ich ein Bild on-the-fly generieren und PNG hab ich einfach genommen, weil es super Quali hat und die durchsichtige Farbe unterstützt, was z.B. bei JPG ein bisschen anders ist, vor allem was die Qualität angeht. Vielleicht habe ich den Datei-Header auch falsch zusammengesetzt, weiß ich nicht. Die Datei-Header kann man ja nachgooglen. Die Frage ist natürlich, ob es sich überhaupt lohnt. Aber kannst es ja probieren. Vielleicht gibt es auch Libs, die nur die "Nutz-Bytes" haben wollen und man selber gar nicht mehr das Format nachbauen muss.
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Hier mal eine Möglichkeit das ganz per 2D Array durchzuführen:
AWT
Code :1 2 3 4 5
public Image getImageFromArray(int[] pixels, int width, int height) { MemoryImageSource mis = new MemoryImageSource(width, height, pixels, 0, width); Toolkit tk = Toolkit.getDefaultToolkit(); return tk.createImage(mis); }
ImageIO:
Code :1 2 3 4 5 6
public static Image getImageFromArray(int[] pixels, int width, int height) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); WritableRaster raster = (WritableRaster) image.getData(); raster.setPixels(0,0,width,height,pixels); return image; }
Die beiden Methoden sollten eigentlich beide funktionieren und beide auch das selbe Ergebnis liefern.
Den PixelArray bekommt man z.B. über den PixelGrabber wenn man ein Bild in einen Array einliest, da du aber nur 2 Farben hast kannst die int-Werte für die beiden Pixel auch irgendwo als konstante hinterlegen um statt true/false dann diese Werte in den Array einzutragen.
Ähnliche Themen
-
Web Worker - Layoutprozess und Zeichnen in Canvas
Von Danielku15 im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 10.12.10, 11:01 -
HTML5 - Canvas asynchron zeichnen.
Von Danielku15 im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 04.10.10, 12:44 -
Canvas neu zeichnen
Von HTML5er im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 07.10.09, 18:09 -
Java Canvas Zeichnen
Von nathaniells freak im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 24Letzter Beitrag: 29.05.08, 14:09 -
SWT: auf Canvas Text über Bild zeichnen
Von denyo85 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 14.09.07, 16:50





Zitieren
Login





