Hey,
ich habe es nun hinbekommen ein Bitmap per
API zu erstellen und kann dieses auch auf der Festplatte speichern. Jetzt habe ich ein kurioses Problem. Und zwar schlägt CreateDIBSection() in unregelmäßigen Abständen fehl, wenn ich als Farbtiefe 8 bit verwende. Das ausschließlich bei 8 bit. Höhere oder tiefere Werte funktionieren einwandfrei.
Edit: Habe das mal weiter verfolgt und festgestellt, dass der Aufruf nur dann fehlschlägt, wenn er aus einem Thread heraus erfolgt. Hierbei ist es egal, ob der Thread die Delphi Kapselung TThread verwendet oder per CreateThread() oder BeginThread() erstellt wurde.
Der ErrorCode ist, wenn es fehlschlägt immer: ERROR_INVALID_PARAMETER.
Delphi-Quellcode:
// Canvas erstellen
FCanvas := CreateCompatibleDC(0);
// Bitmap erstellen
FillChar(BMI, SizeOf(BMI), #0);
with BMI do
begin
bmiHeader.biSize := SizeOf(BITMAPINFOHEADER);
bmiHeader.biWidth := FWidth;
bmiHeader.biHeight := FHeight;
bmiHeader.biPlanes := 1;
bmiHeader.biBitCount := PixelFormatToBitCount(FFormat);
bmiHeader.biCompression := BI_RGB;
bmiHeader.biSizeImage := 0;
bmiHeader.biXPelsPerMeter := 0;
bmiHeader.biYPelsPerMeter := 0;
bmiHeader.biClrUsed := 0;
bmiHeader.biClrImportant := 0;
end;
FBitmap := CreateDIBSection(FCanvas, BMI, DIB_RGB_COLORS, FMemory, 0, 0);
if FBitmap = 0 then
begin
WriteLn(SysErrorMessage(GetLastError);
end;
SelectObject(FCanvas, FBitmap);
Irgendwelche Ideen?
Viele Grüße
Zacherl