ByteArray, die 2.

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

ByteArray, die 2.

Beitrag von garfield9992003 »

N´abend @ alle.

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()
dieser ist aber aufgrund des PLOT recht langsam.
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()
Der untere Code liefert mir ein Bild, wo die Farbinformationen fehlerhaft sind und die Bildzeilen sind nicht wirklich untereinander - sie laufen "schräg".

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
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

Beitrag von garfield9992003 »

Oh man. Funktioniert nun.

Man muss nur wissen, dass jede Scanline eines Bitmaps Wordaligniert sein muss :(
Antworten