StdPicture.Render - Verständnisproblem

29/02/2008 - 12:16 von Jörg Ostendorp | Report spam
Hallo NG,

ich habe ein ziemlich großes StdPicture-Objekt im Speicher und möchte nun
nur einen bestimmten Bereich davon in einem Access-Image-Control anzeigen
lassen. Im verwende ich dafür die Funktion fStdPicToImageData von Stephen
Lebans. Mein Problem ist, daß ich zwar wie gewünscht nur einen bestimmten
Bereich *anzeigen* lassen kann, ich kriege es aber nicht hin, daß wirklich
nur mit die notwendigen, sprich anzeigbaren, Bytes *verarbeitet* werden.

Grober Ablauf (gehe mal davon aus, daß die Funktion bekannt ist):

- StdPicture ist gegeben
- GetDC(0), Referenz-DC erzeugen
- CreateEnhMetaFile, Metafile in definierter Größe (Rect) erzeugen
- StdPic.Render, gewünschten Bildbereich aus StdPicture in Metafile
zeichnen
-> GetEnhMetaFileBits liefert trotzdem sàmtliche Bytes des Objektes zurück
-> Erzeugung und Zuweisung eines Byte-Arrays zur PictureData-Property des
Controls (Anzeige ok, Array viel zu groß, Performance im Keller)

Ich bin bisher davon ausgegangen, daß durch das Rendern nur ein bestimmter
Bereich kopiert wird. Dem ist offensichtlich nicht so?!

Könnte mir jemand mal auf die Sprünge helfen, wo ich ansetzen muß?

AXP, Vista

Schon mal Danke!

Grüßle vom Bodensee
Jörg Ostendorp

Access-FAQ: www.donkarl.com
 

Lesen sie die antworten

#1 Sascha Trowitzsch
01/03/2008 - 14:17 | Warnen spam
Hi Jörg,

"Jörg Ostendorp" <"Ostendorp(punkt)mpda(at)ecodatadesign(punkt)de"> schrieb im
Newsbeitrag news:
Hallo NG,

ich habe ein ziemlich großes StdPicture-Objekt im Speicher und möchte nun
nur einen bestimmten Bereich davon in einem Access-Image-Control anzeigen
lassen. Im verwende ich dafür die Funktion fStdPicToImageData von Stephen
Lebans. Mein Problem ist, daß ich zwar wie gewünscht nur einen bestimmten
Bereich *anzeigen* lassen kann, ich kriege es aber nicht hin, daß wirklich
nur mit die notwendigen, sprich anzeigbaren, Bytes *verarbeitet* werden.

Grober Ablauf (gehe mal davon aus, daß die Funktion bekannt ist):

- StdPicture ist gegeben
- GetDC(0), Referenz-DC erzeugen
- CreateEnhMetaFile, Metafile in definierter Größe (Rect) erzeugen
- StdPic.Render, gewünschten Bildbereich aus StdPicture in Metafile
zeichnen
-> GetEnhMetaFileBits liefert trotzdem sàmtliche Bytes des Objektes zurück
-> Erzeugung und Zuweisung eines Byte-Arrays zur PictureData-Property des
Controls (Anzeige ok, Array viel zu groß, Performance im Keller)

Ich bin bisher davon ausgegangen, daß durch das Rendern nur ein bestimmter
Bereich kopiert wird. Dem ist offensichtlich nicht so?!

Könnte mir jemand mal auf die Sprünge helfen, wo ich ansetzen muß?

AXP, Vista



Mit Render hab ich schon immer Probleme gehabt - ich kann dir die konkrete
Antwort nicht geben.
Ich frage mich aber, warum du nicht zunàchst den Ausschnitt des Bildes über
GDI-Blits oder GDI+ erzeugst und erst dann anschließend das neu erzeugte Bitmap
in PictureData verwandelst?
Also:
- CompatibleDC
- CompatibleBitmap
- *BitBlt*
- etc.
- GetObject
- Dann der Einfachkeit halber das neue Bmp in StdPicture umwandeln und an Lebans
Routine übergeben oder altenativ diese kürzen und diekt das Bmp-Handle
übergeben.

Noch mehr frage ich mich aber, warum es denn unbedingt ein Access-Image sein
muss und nicht ein MSForms-Image zum Einsatz kommen darf?

Ciao, Sascha

Ähnliche fragen