TJPEGImageを使用してフルカラーのビットマップを256色に減色する関数です。私個人の意見ですが、実用に十分耐えうるクオリティだと思います。なお、いうまでもありませんがJpegユニットをusesに追加してください。
procedure JpegReduce8Bit(Bitmap: TBitmap);
var
Jpg: TJPEGImage;
begin
if not (Bitmap.PixelFormat in [pf24bit, pf32bit]) then Exit;
Jpg := TJPEGImage.Create;
try
Jpg.CompressionQuality := 100;
Jpg.Assign(Bitmap);
{ Jpg.Compress;の前にJpg.PixelFormat := jf8bit; }
{ を置くとエラーになるので注意してください }
Jpg.Compress;
Jpg.PixelFormat := jf8bit;
Bitmap.Assign(Jpg);
finally
Jpg.Free;
end;
end;
|