Ich erstelle ein Bild(24Bit) und muss es jetzt in einen Buffer schreiben. Mit CopyImageToMemory sollte das schonmal kein Problem sein
Code: Alles auswählen
Procedure CopyImageToMemory(ImageNumber.l, memory.l)
Protected TemporaryDC.l, TemporaryBitmap.BITMAP, TemporaryBitmapInfo.BITMAPINFO
TemporaryDC = CreateDC_("DISPLAY", #Null, #Null, #Null)
GetObject_(ImageID(ImageNumber), SizeOf(BITMAP), TemporaryBitmap.BITMAP)
TemporaryBitmapInfo\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
TemporaryBitmapInfo\bmiHeader\biWidth = TemporaryBitmap\bmWidth
TemporaryBitmapInfo\bmiHeader\biHeight = -TemporaryBitmap\bmHeight
TemporaryBitmapInfo\bmiHeader\biPlanes = 1
TemporaryBitmapInfo\bmiHeader\biBitCount = 24
TemporaryBitmapInfo\bmiHeader\biCompression = #BI_RGB
; Speicher reservier ich hier...
memory= GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT, TemporaryBitmapInfo\bmiHeader\biSizeImage)
GetDIBits_(TemporaryDC, ImageID(ImageNumber), 0, TemporaryBitmap\bmHeight, memory, TemporaryBitmapInfo, #DIB_RGB_COLORS)
DeleteDC_(TemporaryDC)
EndProcedureCode: Alles auswählen
Protected *iBuffer.BITMAPINFO
CopyImageToMemory(image, *iBuffer)
Code: Alles auswählen
CallFunction(ADLL, "AVIStreamWrite", pCompressed, frame, 1, *iBuffer , *iBuffer\bmiHeader\biSizeImage, #AVIIF_KEYFRAME, 0,0)