Ich habe ein RGB-Speicherbereich (pBuffer), wo jeweils 3 aufeinanderfolgende Bytes jeweils die Farbe für einen Pixel darstellen.
Also ein Byte weniger als im RGBQUAD.
Bisher funktioniert folgender Code:
Code: Alles auswählen
bmpx.l=400
bmpy.l=200
dwBufferSize.l=bmpx*bmpy
pBuffer.l=AllocateMemory(dwBufferSize*3)
hBMP.l=CreateImage(0, bmpx, bmpy)
dcv=StartDrawing(ImageOutput())
For y = 0 To bmpy-1
t1.l=y*bmpx
For x = 0 To bmpx-1
t2.l=pBuffer+t1+x*3
Plot(x, y, (PeekB(t2)&$FF) + (PeekB(t2+1)&$FF)<<8 + (PeekB(t2+2)&$FF)<<16)
Next
Next
StopDrawing()Nun habe ich es so versucht:
Code: Alles auswählen
Structure _RGB
r.b
g.b
b.b
EndStructure
Structure THEBITMAPINFO
bmiHeader.BITMAPINFOHEADER
bmiColors._RGB ;.RGBQUAD[1]
EndStructure
bmpx.l=400
bmpy.l=200
dwBufferSize.l=bmpx*bmpy
pBuffer.l=AllocateMemory(dwBufferSize*3)
hBMP.l=CreateImage(0, bmpx, bmpy)
dcv=StartDrawing(ImageOutput())
bmi.THEBITMAPINFO
bmi\bmiHeader\biSize=SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth=bmpx
bmi\bmiHeader\biHeight=bmpy
bmi\bmiHeader\biPlanes=1
bmi\bmiHeader\biBitCount=24
SetDIBits_(dcv,hBMP,0,bmpy,pBuffer,bmi, 0) ; rgbcolors=0 palcolors=1
;StretchBlt_(dcv,0,0,ImageInfo\dwPixel,ImageInfo\dwLine,dcv,0,0,200,100,#SRCCOPY)
StopDrawing()Ich weis, das das Bild mit der untern Funktion auf dem Kopf steht - das ist allerdings egal und wird von mir an einer anderen Stelle behoben.
Zudem sollte der Stretchblt im unteren Code das so frisch erzeugte Bild verkleinert darstellen, was auch nicht wirklich funktioniert.
Wo habe ich da Mist gebaut?
Frank