Markus Schlager m.slg@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:
- 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
- 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@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@0 corner: 50@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 :)
- 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