Image MemoryAdress + AddPackMemory

Für allgemeine Fragen zur Programmierung mit PureBasic.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Image MemoryAdress + AddPackMemory

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Image MemoryAdress + AddPackMemory

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Image MemoryAdress + AddPackMemory

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Image MemoryAdress + AddPackMemory

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Image MemoryAdress + AddPackMemory

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Image MemoryAdress + AddPackMemory

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten