Nochmals DANKE.
Ich habe alles nochmal durchgesehen und die Verwechselungen beseitigt. Jetzt funktioniert es.
Hier noch einmal der berichtigte Code. ich habe nach dem tagBitmapInfo nur noch die Colors 1..255 definiert, weil [0,0] bereits in tagBitmapInfo enthalten ist.
Code:
TPixelArr = Array[1..200,1..320] of Byte;
ThkBMP = RECORD // Länge = 65.078 Bytes
bmf : TBitMapFileHeader; // 14 Bytes + 0
bminfo : tagBitmapInfo; // 44 Bytes + 14
bmiColors2 : Array[1..255] of RGBQUAD; // 1020 Bytes + 58 Rot, Grüm, Blau FARB-PALLETTE
bmPixelArr : TPixelArr; // 64000 Bytes + 1078 Pixel
End; // ThkBMP = RECORD // +65078 ---- Ende der BMP -----
Var
hkBMP : ThkBMP;
Die Pointer-Variablen habe ich weggelassen und stattdessen die Angaben direkt eingetragen
Code:
StretchDIBits ( Form1.Canvas.Handle, // DIB-Quelle in ZIEL-Fenster angepaßt
10, // X-Ursprung-Fenster
10, // Y-Ursprung-Fenster
960, // Fenster-Breite
600, // Fenster-Höhe
0, // X-Ursprung-BMP
0, // Y-Ursprung-BMP
320, // X-Breite BMP
200, // Y-Höhe BMP
@(hkBMP.bmPixelArr), // Anf Bild-Daten in hkBMP+1078
hkBMP.bminfo, // tagBitMapInfo
DIB_RGB_COLORS, // Die Farb-Tab enthält
RGB-Werte
SRCCOPY ) ; // Operation: Quelle => Ziel kopieren
Ich hoffe, ich darf noch eine Zusatzfrage stellen...
Gibt es eine Möglichkeit, Farbcodes direkt in Bmp.Canvas.Pixels einzutragen, wenn man statt einem RECORD, wie ich es gemacht habe, TBITMAP verwendet und kann man auch auf die Einträge in der Colortabelle Einfluss nehmen ?
Ich habe das versucht, es gibt keinen Fehler, aber in der erzeugten BMP stehen nicht die von mir gewünschten Farbeinträge, sondern nahezu alles ist 0.
Code:
Procedure MakeBMP2;
Var
Bmp : TBitmap;
yZei, xSpa, i : Integer;
by : Byte;
H : HPalette;
P : PLogPalette;
Begin
Bmp := TBitmap.Create;
Bmp.Width := 320;
Bmp.Height := 200;
Bmp.PixelFormat := pf8bit;
GetMem(P, SizeOf(TLogPalette) + (SizeOf(TPaletteEntry) * 255));
P.palVersion := $300;
P.palNumEntries := 256;
for i := 0 to 255 do
Begin
P.palPalEntry[i].peFlags := 0;
Case i of
0: Begin
P.palPalEntry[i].peBlue := $00; // 0 = Schwarz
P.palPalEntry[i].peGreen := $00;
P.palPalEntry[i].peRed := $00;
End;
1: Begin
P.palPalEntry[i].peBlue := $FF; // 1 = CYAN
P.palPalEntry[i].peGreen := $FF;
P.palPalEntry[i].peRed := $00;
End;
2: Begin
P.palPalEntry[i].peBlue := $FF; // 2 = Magenta
P.palPalEntry[i].peGreen := $00;
P.palPalEntry[i].peRed := $FF;
End;
3: Begin
P.palPalEntry[i].peBlue := $FF; // 3 = Weiss
P.palPalEntry[i].peGreen := $FF;
P.palPalEntry[i].peRed := $FF;
End;
else
Begin
P.palPalEntry[i].peRed := 0;
P.palPalEntry[i].peGreen := 0;
P.palPalEntry[i].peBlue := 0;
End;
End; // Case
End;
H := CreatePalette(P^);
if H <> 0 then
Bmp.Palette := H;
for yZei := 1 to 200 do
Begin
for xSpa := 1 to 320 do
Begin
by := ELEVBINarr[yZei,xSpa];
Bmp.Canvas.Pixels[xSpa-1,yZei-1] := by;
End; // for xSpa
End; // for yZei
Bmp.SaveToFile(DsnBMP2);
FreeMem(P);
End;