|
Aus welchem Grund auch immer Sie vielleicht das Bild eines
Picture-Objekts als reine Byte-Sammlung benötigen könnten - ob
etwa zum Speichern in einer Datenbank (es gibt immer noch
Datenbanken mit Schnittstellen, die mit einem Picture-Objekt nichts
anzufangen wissen) oder zum zwischenzeitlichen
"objektfreien" Ablegen im Arbeitsspeicher: Das
Picture-Objekt liefert Ihnen die Bytes nicht frei Haus. Nun könnten
Sie die Bytes einer einfachen Bitmap mit Hilfe einiger
API-Funktionen anhand der Handle-Eigenschaft des Picture-Objekts
erhalten. Und auch bei Bildern im Icon-, Cursor- oder
Metafile-Format wäre das irgendwie möglich und mit noch höherem
Aufwand verbunden. Ganz zu schweigen vom
"Rückwärtsgang", wenn Sie die Byte-Daten wieder in ein
Picture-Objekt zurück verwandeln wollen. Nicht sonderlich elegant,
aber dafür mit weitaus weniger Aufwand verbunden, wäre der Umweg
über temporäre Dateien.
Elegant und einfach ist dagegen der kleine Umweg über ein
PropertyBag-Objekt. Seit Visual Basic 6 können Sie
nämlich selbst Instanzen davon anlegen, ein oder mehrere Objekt(e)
darin ablegen ("serialisieren") und den Inhalt komplett
als Byte-Array auslesen. Umgekehrt können Sie natürlich auch ein
Byte-Array einlesen und von dem PropertyBag-Objekt wieder die darin
abgelegten Objekte erzeugen lassen. Die Bytes eines so konvertierten
Picture-Objekts enthalten dieses dann allerdings in einem eigenen
Format, das beispielsweise nicht mehr zu einem der
Bild-Datei-Formate kompatibel ist. Es sind eben nur einfach Bytes,
im Sinne der Eingangs angeführten Aufgabenstellung.
Die Funktion PictureToBytes gibt Ihnen ein übergebenes
Picture-Objekt als Byte-Array zurück. Dem Gegenstück
BytesToPicture übergeben Sie ein derartig erzeugtes Byte-Array und
erhalten wiederum ein Picture-Objekt zurück. Bei beiden Funktionen
können Sie noch im optionalen Parameter den Schlüsselnamen
angeben, unter dem das Picture-Objekt im PropertyBag-Objekt abgelegt
wird - als Standard-Name wird "Bild" verwendet.
In beiden Funktionen wird das PropertyBag-Objekt übrigens in
einer With-Konstruktion direkt instanziert und verwendet, ohne dass
zuvor eigens eine Objekt-Variable deklariert worden wäre.
Public Function PictureToBytes(Picture As StdPicture, _
Optional Key As String = "Bild") As Byte()
With New PropertyBag
.WriteProperty Key, Picture
PictureToBytes = .Contents
End With
End Function
Public Function BytesToPicture(Bytes() As Byte, _
Optional Key As String = "Bild") As StdPicture
With New PropertyBag
.Contents = Bytes
Set BytesToPicture = .ReadProperty(Key)
End With
End Function
 |
Die Funktionen PictureToBytes und
BytesToPicture konvertieren ein Picture-Objekt in ein
Byte-Array und wieder zurück

|
Wenn wir schon einmal dabei sind: Auf gleiche Weise lässt sich
auch eine ganze in einer Collection abgelegte Sammlung von
Picture-Objekten in Bytes und wieder zurück in eine Collection
verwandeln - mit den Funktionen PictureCollectionToBytes und
BytesToPictureCollection.
Public Function PictureCollectionToBytes( _
Collection As Collection, _
Optional CountKey As String = "Anzahl", _
Optional PicKey As String = "Bild") As Byte()
Dim l As Long
With New PropertyBag
.WriteProperty CountKey, Collection.Count, 0
For l = 1 To Collection.Count
.WriteProperty PicKey & l, Collection(l)
Next 'l
PictureCollectionToBytes = .Contents
End With
End Function
Public Function BytesToPictureCollection(Bytes() As Byte, _
Optional CountKey As String = "Anzahl", _
Optional PicKey As String = "Bild") As Collection
Dim l As Long
Dim nCollection As Collection
Set nCollection = New Collection
With New PropertyBag
.Contents = Bytes
For l = 1 To .ReadProperty(CountKey, 0)
nCollection.Add .ReadProperty(PicKey & l)
Next 'l
End With
Set BytesToPictureCollection = nCollection
End Function
 |
Die Funktionen PictureCollectionToBytes und
BytesToPictureCollection konvertieren in einer Collection
enthaltene Picture-Objekte in ein Byte-Array und wieder
zurück

|

|