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
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.
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.