Image Grösse im Speicher

Für allgemeine Fragen zur Programmierung mit PureBasic.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Image Grösse im Speicher

Beitrag von Andreas21 »

Hallo ich habe mal eine Frage zu den Images.

Ich will ein ersteltes Bild per Network versenden aber es dazu nicht voher speichern um es dann neu einzulessen und dann zu versenden.

Gibts irgent eine möglichkeit die grösse eines Images zu ermiteln. also die grösse in Bites? Die Startadresse hat man ja.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Wenn ich das richtig herausgelesen habe, liegt das Bild in irgendeinem Puffer, der durch AllocateMemory() erzeugt wurde.

Die Größe, die du bei AllocateMemory() angegeben hast, wird auch übertragen, also der gesamte Puffer, ob nun verwendet oder nicht.

Um die Größe eines Bildes herauszubekommen, rechnet man einfach:

Code: Alles auswählen

Größe = Breite * Höhe * Farbtiefe in Bytes

Farbtiefe:
32 Bits -> 4 Bytes
16 Bits -> 2 Bytes
8 Bits (256 Farben) -> 1 Byte
Angaben (vorallem die Formel) ohne Garantie.

Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Beitrag von Andreas21 »

Nicht ganz. Ich rede hier von den PureBasic - Image.

Also ich erstelle eine Grafik

image = CreateImage(0, 100, 100)

Und will jetzt dieses Bild per Netzwerk versenden.
In image müste ja die Start Position stehen.
Also ab wo das Bild im Ram liegt.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Laut PB-Hilfe steht in image der Identifer - was immer das auch ist. (ImageID?)

Es scheint keine Möglichkeit zu geben, wie man die sPeicheradresse herausbekommt.


Hm...

Greetz Laurin



Edit: Vielleicht hilft OffsetOf(). Ist aber nur eine Vermutung.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Beitrag von Andreas21 »

das ist aber nur so wenn du das machst.

Wenn #PB_Any als '#Image' Parameter verwendet wird, dann wird der Identifier des neuen Image als 'Ergebnis' zurückgegeben. Das Bild-Format wird vom aktuellen Bildschirm-Format abgeleitet.

also:

image = CreateImage(#PB_Any, 100, 100)

Edit:

also ich bekomme scheinbar das Ram adresse wieder. Jedenfalls sied es so aus.

debug CreateImage(0, 100, 100)
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Code: Alles auswählen

*image = CreateImage(#PB_Any, 8, 8)

Debug *image

For i = 0 To 64
  Debug PeekB(*image+i)
Next
Es wird ein leeres 8x8 Image erzeugt. Leer heißt schwarz (0,0,0). Dann lesen wir 65 Bytes raus und geben die aus.
Wenn du dir die Debugergebnisse anschaust, wirst du merken, dass nicht nur 0 rauskommt. Es kann also keine Speicheradresse sein.

Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Beitrag von Andreas21 »

Jo leider. :-(
Da komme ich wohl nicht ums speichern rum und dann die datei neu einlessen und dann senden :-(

Danke für deine Hilfe.

Aber kannst du mir sagen warum das bei mir einen Fehler ergibt?

Code: Alles auswählen

*image = CreateImage(0, 8, 8) 

Debug *image 

For i = 0 To 64 
  Debug PeekB(*image+i) 
Next
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Merkwürdiger Fehler... :?

Selbst wenn man statt der 0 eine Konstante einsetzt, stürzt das Programm ab.


Bug?


Greetz Laurin


Edit: Ich weiß jetzt, was das mit dem Identifier auf sich hat:
PB-Hilfe hat geschrieben:II. Dynamische Nummerierung

Manchmal ist die indexierte Nummerierung nicht sehr praktisch, um dynamische Situationen zu handhaben, wo wir mit einer unbekannten Anzahl von Objekten umgehen müssen. PureBasic bietet eine einfache und komplementäre Möglichkeit, Objekte auf eine dynamische Art und Weise zu erstellen. Beide Methoden (indexiert und dynamisch) können gleichzeitig - ohne irgendeinen Konflikt - verwendet werden. Um ein dynamisches Objekt zu erstellen, müssen Sie die #PB_Any Konstante anstelle einer Index-Zahl angeben, und die dynamische Nummer wird als Ergebnis der entsprechenden Funktion zurückgegeben. Dann verwenden Sie einfach diese Nummer mit den anderen Objektfunktionen an der Stelle, wo Sie sonst eine indexierte Zahl verwenden würden. Diese Art und Weise des Objekt-Handlings kann sehr nützlich sein, wenn es in Verbindung mit einer verknüpften Liste verwendet wird, welche auch auch einen dynamischen Weg des Speicherns darstellt. Ein vollständiges Beispiel für dynamische Objekte und verknüpfte Listen finden Sie hier: MDI ImageViewer.pb.
Beispiel

DynamicImage1 = CreateImage(#PB_Any, 640, 480) ; Erstellen eines dynamisch nummerierten Bildes
ResizeImage(DynamicImage1, 320, 240) ; Verändern der Größe von DynamicImage1
Zuletzt geändert von Laurin am 12.12.2004 03:00, insgesamt 1-mal geändert.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Wieso bug?
CreateImage() gibt euch entweder die PBID oder das handle zum bitmap zurück, keines der beiden hat was mit der Speicheradresse des Bildes zu tun...
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Ach ja, jetzt sehe ich es auch...

Pff, manchmal sehe ich den Wald vor lauter Bäumen nicht.

Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Antworten