Okay, nachdem die Hilfe nicht besonders viel gebracht hat (ich versuche die
API soweit wie möglich nur im notfall zu benutzen, sonst könnt ich genauso C++ verwenden) habe ich es dennoch mit einem trick geschafft...:
frei nach meiner funktion wie ich es mache
Delphi-Quellcode:
//datentypen:
// BitmapXXbit = Bitmap mit 24, 32 usw. Bit
// Bitmap8Bit = Bitmap mit 256 Farben
// JPG = TJPegImage (uses jpeg!!) als utility
// Reduzieren der Bitmap Qualität mit dem Palette Optimizing von JPEG
Function BMPReduceTo8Bit(BitmapXXBit: TBitmap): TBitmap;
VAR
JPG: TJPegImage;
Bitmap8bit: TBitmap;
Begin
IF BitmapXXBit<>nil then begin
JPG:=TJpegImage.Create;
JPG.CompressionQuality:=100; // <--damit die bitmap nicht komprimiert wird
JPG.Assign(BitmapXXBit); //<- BitmapXXBit -> JPG
JPG.JPEGNeeded; // <-- verwandle in JPEG!
JPG.PixelFormat:=jf8bit; // 8 bit reduzierung
JPG.DibNeeded; // palette wird neu geschrieben, wieder bitmap fähig
bitmap8bit:=TBitmap.Create;
bitmap8bit.PixelFormat:=pf8bit;
bitmap8bit.Assign(JPG); // JPG (8bit,opt.palette) -> BMP (8bit)
// bitmap8bit.SaveToFile('whatever.bmp'); <-speichern
JPG.Free;
Result:=Bitmap8Bit;
end; // if %Bmp ned nil
end; // Proc %bmp8bit