Seite 1 von 1
Image MemoryAdress + AddPackMemory
Verfasst: 19.05.2012 21:34
von Lambda
Wenn ich die Speicheradresse eines Bildes wie folgt ermittel
Code: Alles auswählen
StartDrawing(ImageOuput(Image))
address = DawingBuffer()
StopDrawing()
Und es dann mit AddPackMemory speicher will, ist die Adresse ungültig. Gibt DrawingBuffer() denn überhaupt die Speicheradresse des Bildes zurück? - wie kommt man sonst an die Adresse ohne das Bilder hin und her zu wälzen?
Re: Image MemoryAdress + AddPackMemory
Verfasst: 19.05.2012 21:52
von ts-soft
Gibt die Speicheradresse des Zeichenbuffers zurück, so wie in der Hilfe auch erläutert.
Ich denke mal nicht, das dieser Buffer zum Speichern geeignet ist.
Re: Image MemoryAdress + AddPackMemory
Verfasst: 19.05.2012 22:04
von STARGÅTE
Diese Adresse ist (offiziell) nur im Drawing-Block gültig.
Das heißt, du musst innerhalb dieses Blocks, deinen AddPackMemory() aufrufen und die Länge von DrawingBufferPitch() abhängig machen.
Re: Image MemoryAdress + AddPackMemory
Verfasst: 19.05.2012 22:07
von Lambda
Auch schon innerhalb versucht, immernoch ungültig. ;|
Edit: Es geht scheinbar doch (MemorySize statt DrawingBufferPitch verwendet), aber was gespeichert wird ist scheinbar kein Bild. Wenn es durch CatchImage geladen wird schlägt es fehl.
Re: Image MemoryAdress + AddPackMemory
Verfasst: 19.05.2012 22:22
von STARGÅTE
Also MemorySize ist auch nicht richtig.
Die Länge des Buffers ist: DrawingBufferPitch() * OutputHeight()
Das CatchImage nicht funktioniert ist klar, da du ja auch kein Bild in dem sinne Speicherst, sondern die Rohdaten im Video-Speicher bzw. Ram. Das sind wirklich Rohdaten (also nicht mal BMP-Format oder so), dort sind auch noch "Platzfüller" und so n kram drin.
Re: Image MemoryAdress + AddPackMemory
Verfasst: 19.05.2012 22:30
von ts-soft
So ein Bild hat 2 Header, einer mit den "Bildinformationen" und einer mit den "Dateiinformationen" und dann noch
die reinen Bilddaten. Mit nur den Bilddaten machste Dir das Leben unnötig schwer, da Du die fehlenden Informationen
voranstellen mußt, damit CatchImage wieder funktioniert.
Auch per API benötigst Du mindestens einen gefüllten BITMAPINFOHEADER, siehe hier:
CreateDIBitmap