function 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;