Hilfe - Wie erstellt man in Squeak eine Pixelgrafik?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Hilfe - Wie erstellt man in Squeak eine Pixelgrafik?

R. Baumann
Ich möchte gerne ein Bild (Pixelgrafik) erstellen, beispielsweise ein Sierpinski-Dreieck, und benötige dazu eine Anweisung der Art putPixel(x, y), drawDot(x, y) oder g.fillRect(x, y, 2, 2). Das müsste es doch auch in Squeak geben.

Ich habe lange in den Büchern (Inside Smalltalk, Blue Book) gesucht, aber keine Anleitung, kein Beispiel für diese einfache Aufgabe gefunden.

Mit Dank im voraus für die Hilfe

R. Baumann
Reply | Threaded
Open this post in threaded view
|

Re: Hilfe - Wie erstellt man in Squeak eine Pixelgrafik?

Markus Schlager-2
Hallo Rüdeger Baumann,


On Sun, 26 Dec 2010, R. Baumann wrote:

>
> Ich möchte gerne ein Bild (Pixelgrafik) erstellen, beispielsweise ein
> Sierpinski-Dreieck, und benötige dazu eine Anweisung der Art putPixel(x, y),
> drawDot(x, y) oder g.fillRect(x, y, 2, 2). Das müsste es doch auch in Squeak
> geben.
>

Ich würde vermuten, dass die Klasse 'Form' eine mögliche Lösung des
Problems darstellt:

Form>>colorAt: x@y put: Color myColor

Schöne Grüße und frohe Festtage

Markus
Reply | Threaded
Open this post in threaded view
|

Re: Hilfe - Wie erstellt man in Squeak eine Pixelgrafik?

R. Baumann
Vielen Dank für den Hinweis - aber in den Klassen Form und BitBlt habe ich nachgeschaut. Dort wird gezeigt, wie man Bilder als rechteckige Bereiche mit Hilfe von 0/1-Reihungen (Arrays) erzeugt. Ich benötige aber lineare Gebilde, die man mit Pixeln füllen und dann untereinandersetzen kann.
Ennos Hinweis auf Canvas werde ich gleich nachgehen; aber ist dies nicht eher für Morphs gedacht?
Warum sind Dinge, die z. B. in Java ganz einfach gehen, in Squeak nur so kompliziert?

Nochmals vielen Dank für die guten Wünsche

R. B.
Reply | Threaded
Open this post in threaded view
|

Re: Hilfe - Wie erstellt man in Squeak eine Pixelgrafik?

Andreas.Raab
On 12/26/2010 10:42 PM, R. Baumann wrote:
> Vielen Dank für den Hinweis - aber in den Klassen Form und BitBlt habe ich
> nachgeschaut. Dort wird gezeigt, wie man Bilder als rechteckige Bereiche mit
> Hilfe von 0/1-Reihungen (Arrays) erzeugt. Ich benötige aber lineare Gebilde,
> die man mit Pixeln füllen und dann untereinandersetzen kann.
> Ennos Hinweis auf Canvas werde ich gleich nachgehen; aber ist dies nicht
> eher für Morphs gedacht?

Nein. Gar nicht. Am einfachsten geht das so:

form := Form extent: 100@100 depth: 32.
(form getCanvas)
        fillRectangle: form boundingBox color: Color white; "background"
        fillOval: form boundingBox color: Color red; "kreis"
        line: 0@0 to: 100@100 width: 1 color: Color black;
        line: 0@100 to: 100@0 width: 1 color: Color black; "kreuz;"
        point: 50@50 color: Color green; "pixel"
yourself. "usw. usf. see Canvas/FormCanvas Protokoll"

"und jetzt anzeigen"
form display.

"oder speichern"
PNGReadWriter putForm: form onFileNamed: 'sample.png'.

"oder als Morph oeffnen"
(SketchMorph withForm: form) openInWorld.

> Warum sind Dinge, die z. B. in Java ganz einfach gehen, in Squeak nur so
> kompliziert?

Weil a) Du Java kennst und Squeak nicht und b) es praktisch keine
Dokumentation fuer Squeak gibt und fuer Java schon.

Ciao,
   - Andreas
Reply | Threaded
Open this post in threaded view
|

Re: Hilfe - Wie erstellt man in Squeak eine Pixelgrafik?

R. Baumann
Danke, Andreas, ich werde die Hinweise gleich umsetzen.

Zuerst möchte ich mich noch bei Markus Schlager bedanken; es ging doch, wie er geschrieben hat.
Das folgende Programm (im Workspace) erzeugt ein Pascas-Dreieck mod 5.

basis := 5.
0 to: (basis hoch: 3) - 1 do: [:zeile |
  0 to: zeile do: [:spalte |
    w := zeile comb: spalte.
    w \\ basis = 0
         ifTrue: [Display colorAt: (100 + spalte) @(200 + zeile) put: Color black].
      ] "do"
  ]. "do"

Merke: Squeak-Programmierung lernt man nicht aus Büchern, sondern durch Mundpropaganda (vom Hörensagen, durch dringliches Befragen von Experten).

R. B.