Seite 2 von 3

Verfasst: 12.12.2004 03:06
von traumatic
Laurin hat geschrieben: Es scheint keine Möglichkeit zu geben, wie man die sPeicheradresse herausbekommt.
Sofern es nicht um Linux geht: WinAPI -> GetDIBits()

Beispiel (u.a.) hier:
http://robsite.de/php/pureboard/viewtopic.php?t=1164

Verfasst: 12.12.2004 03:12
von Deeem2031

Code: Alles auswählen

hbmp = CreateImage(0,100,100)
StartDrawing(ImageOutput())
Plot(0,0,RGB(123,0,0))
StopDrawing()

mem = AllocateMemory(100*100*4)
GetBitmapBits_(hbmp,100*100*4,mem)
Debug Red(PeekL(mem)>>16) ;Nur zum test ob der selbe Rot-Wert wie oben rauskommt
... zu spät ;)

Edit: Obwohl, meine Methode is einfacher..

Verfasst: 12.12.2004 04:21
von Kaeru Gaman
man kann auch den drawing-mode verwenden, nur um den pointer zu ermitteln:

Code: Alles auswählen

StartDrawing(ImageOutput())
*mem = DrawingBuffer()
xwid = DrawingBufferPitch()
StopDrawing()
mit DrawingBufferPitch() kann man die länge einer Zeile in Byte erfragen

@Deem:

ich raff dein beispiel nicht... was ist GetBitmapBits_() denn für ne function???

Verfasst: 12.12.2004 13:24
von Andreas21
Super Danke :-)

Verfasst: 12.12.2004 13:25
von Laurin
Das ist ein Befehl der WinAPI.

Dabei wird das Handle zum Bild, dessen Größe und die gewünschte Speicheradresse übergeben. Dann wird das Bild in den Speicher kopiert.


Greetz Laurin

Verfasst: 12.12.2004 14:18
von Andreas21
Windows API

The GetBitmapBits function copies the bitmap bits of a specified bitmap into a buffer.

Requires Windows NT 3.1 or later; Requires Windows 95 or later

GDI32

Declare Function GetBitmapBits Lib "gdi32" Alias "GetBitmapBits" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long

· hBitmap
Identifies the bitmap.

· dwCount
Length of the buffer.

· lpBits
Points to a buffer to receive the bitmap data.

Mit SetBitmapBits müste ich eigentlich auch wieder aus einen Ram ein Image zurück kopieren können oder :-)

Verfasst: 12.12.2004 14:57
von Deeem2031
Kaeru Gaman hat geschrieben:man kann auch den drawing-mode verwenden, nur um den pointer zu ermitteln:

Code: Alles auswählen

StartDrawing(ImageOutput())
*mem = DrawingBuffer()
xwid = DrawingBufferPitch()
StopDrawing()
mit DrawingBufferPitch() kann man die länge einer Zeile in Byte erfragen
Aus der PBHilfe 'DrawingBuffer()': "Diese befindet sich im Videospeicher, wenn die Ausgabe auf ScreenOutput() oder SpriteOutput() erfolgt."

Verfasst: 12.12.2004 21:54
von Kaeru Gaman
@deem

woraus logisch folgt, dass sie sich bei ImageOutput() nicht im Videospeicher befindet.

so what?

Verfasst: 12.12.2004 22:00
von Deeem2031
:freak:

Hast du denn mal deinen Code getestet?

Code: Alles auswählen

CreateImage(0,100,100)
StartDrawing(ImageOutput()) 
*mem = DrawingBuffer() 
Debug *mem
StopDrawing()
Und ich glaube nicht, dass das Bild an Pos. 0 im Speicher ist...

Verfasst: 12.12.2004 23:40
von Kaeru Gaman
ok, mea culpa.

ich hatte es nicht getestet.

asche auf mein haupt.

wie konnte ich auch davon ausgehen, dass die anleitung ausnahmsweise
eine vollständige, nicht irreführende aussage macht.
Bild

Gibt die 'SpeicherAdresse' des Zeichenbuffers ("DrawingBuffer") zurück. Diese befindet sich im Videospeicher, wenn die Ausgabe auf ScreenOutput() oder SpriteOutput() erfolgt.
müsste also heissen:
Gibt die 'SpeicherAdresse' des Zeichenbuffers ("DrawingBuffer") zurück, wenn die Ausgabe auf ScreenOutput() oder SpriteOutput() erfolgt. Diese befindet sich im Videospeicher.