[Squeak-ev] Re: Smalltalk Idiome - Bilderimport

Enrico Schwass ennoausberlin at mac.com
Son Nov 14 20:48:06 UTC 2010


Markus Schlager <m.slg at gmx.de> writes:

Hallo Markus,

> Danke Enno, aber genau das möchte ich vermeiden bzw. nur einmal tun
> müssen. Dann möchte ich das Bild im Image bzw. zumindest im
> Monticello-Paket haben.

Wenn du das Bild geladen hast und das Image abspeicherst, bleibt das
Bild ja erhalten. Der komplette Zustand des Images bleibt erhalten. Aber
es geht dir vielmehr um den Import/Export von Daten

> Konkret zwei Fragen:
> 1. Wenn ich so etwas wie  "Form fromFileNamed: 'myGraphicsFileName'"
> im Smalltalk-Code einer Klasse stehen habe und dann mein Werk mit
> Monticello exportiere und später in ein anderes Image importiere, ist
> dann die Datei myGraphicsFileName mit dabei und am Zielsystem an der
> richtigen Stelle?

Nein. Monticello ist hauptsächlich für Sourcecode gedacht.

Hier hat Bert das schon einmal ausgeführt

http://lists.squeakfoundation.org/pipermail/beginners/2010-April/007002.html

> 2. Was ich eigentlich will: ImageMorph kennt eine Klassenvariable
> 'DefaultForm' (oder auch DefaultImage' bei AlphaImageMorph). Das
> einzige was ich für diese aufbekomme, ist ein Inspektor. Bei pharo ist

ImageMorph class->initialize
	"ImageMorph initialize"

	| h p d |
	DefaultForm := (Form extent: 80 at 40 depth: 16).
	h := DefaultForm height // 2.
	0 to: h - 1 do: [:i |
		p := (i * 2)@i.
		d := i asFloat / h asFloat.
		DefaultForm fill:
			(p corner: DefaultForm extent - p)
			fillColor: (Color r: d g: 0.5 b: 1.0 - d)].

	self registerInFlapsRegistry.

Das wird irgendwo erstmalig aufgerufen. Sollte eigentlich nicht
automatisch passieren. Bert??


> sie ein 1x1-Pixel, bei Etoys ein Bild mit Kleinkinderhänden. Meine
> Schüler sollen Spiele oder Animationen programmieren, bei denen
> beispielsweise irgendwelche Figuren vorkommen sollen, die ein nettes
> Kostüm brauchen. Das ganze sollen sie später mit Monticello bei mir
> abgeben können.

Monticello ist dafür meines Wissens nicht geeignet. Man kann auch das
Ergebnis von storeString kopieren und in eine Methode zur
Initialisierung einfügen. Das wird aber recht schnell recht gross.

RectangleMorph new storeString

liefert

'(RectangleMorph basicNew instVarAt: 1 put: (0 at 0 corner: 50 at 40);
instVarAt: 2 put: nil; instVarAt: 3 put: #(); instVarAt: 4 put: nil;
instVarAt: 5 put: (Color r: 0.613 g: 0.903 b: 1.0); instVarAt: 6 put:
nil; instVarAt: 7 put: 2; instVarAt: 8 put: (Color r: 0.0 g: 0.0 b:
0.0); yourself)'

Das kann man noch in eine Methode schreiben, anderes dann eher nicht :)

> Meine Idee wäre nun, für solche Figuren Unterklassen von ImageMorph
> abzuleiten und mit einer anderen DefaultForm auszustatten. Nun ist die
> erste Frage die, wo/wie ich die DefaultForm überhaupt im
> Smalltalk-Image finde und sie ggf. verändere. Die zweite Frage ist
> die, ob ein Verändern überhaupt sinnvoll ist, nachdem sich DefaultForm
> doch nach recht globaler Variable anhört.

Warum können Sie nicht einfach ein jpg per eMail schicken?
Der Dateiname könnte ja auf die Verwendung hindeuten, was den Import
dann erleichtert. HemdVonName.jpg HoseVonName.jpg .. etc

> Was ich haben möchte, wäre eben so etwas wie DefaultForm, letztlich
> also wohl die Definition einer konkreten 'Form' (im Sinne der
> Smalltalk-Klasse) meineDefaultForm, die ich benutzen kann, um damit
> ImageMorph>>defaultImage im Sinne von
> MeinImageMorph>>defaultImage
>     "Answer the default image for the receiver."
> 	^ meineDefaultForm
> überschreiben kann.
> Mit Hilfe von Berts #storeString habe ich das jetzt geschafft:
> (Form fromFileNamed: 'myGraphicsFileName') storeString
> Drucken und in #defaultImage einfügen.

Verdammt, zu spät gelesen. Da hätte ich mir ja die Erklärung oben sparen
können :)

> 3. Doch noch eine Frage:
> Wenn ich in pharo etwa ein jpg-Bild auf das pharo-Image ziehe, öffnet
> sich ein Popup-Menü, das mir erlaubt, das Bild in einem Fenster zu
> öffnen, als Hintergrund zu benutzen, oder eben 'read graphic into
> ImageImports'.
> Was passiert da und wo/wie kann ich dann auf das Bild zugreifen?

Bei Pharo muss ich passen. Vielleicht mal in HandMorph gucken. Oder
PasteUpMorph

Ich denke, Bert wird dir da ausführlicher antworten.

Enno