rendered paste bodyfunction Create8bitFrom32bitBitmap(Source: TGPBitmap; ColorBits: Integer):
TGPBitmap;
var
ColorQuantizer : TColorQuantizer;
RGBQuadArray : TRGBQuadArray;
tempOut : TBitmap;
streamOut : TMemoryStream;
tempIn : TBitmap;
streamIn : TMemoryStream;
//sid : TGUID;
begin
tempOut := TBitmap.Create;
tempOut.PixelFormat := pf8bit;
tempOut.Width := Source.GetWidth;
tempOut.Height := Source.GetHeight;
ColorQuantizer := TColorQuantizer.Create(256, ColorBits);
try
streamIn := TMemoryStream.Create;
Source.Save(TStreamAdapter.Create(streamIn),ImageBMPClsid);
streamIn.Position := 0;
tempIn := TBitmap.Create();
tempIn.LoadFromStream(streamIn);
ColorQuantizer.ProcessImage(tempIn.Handle);
ColorQuantizer.GetColorTable(RGBQuadArray);
//SetDIBColorTable(tempOut.Canvas.Handle, 0, 256, RGBQuadArray);
//ColorQuantizer := TColorQuantizer.Create(256, ColorBits);
tempOut.Canvas.Draw(0, 0, tempIn);
streamOut := TMemoryStream.Create;
tempOut.SaveToStream(streamOut);
Result := TGPBitmap.Create(TStreamAdapter.Create(streamOut));
// GetEncoderClsid('image/png', sid);
// Result.Save('done.png',sid,nil);
finally
streamIn.Free;
tempIn.Free;
ColorQuantizer.Free;
tempOut.Free;
streamOut.Free;
end;
end;