All pastes #431717 Raw Edit

Someone

public text v1 · immutable
·published 2007-04-09 21:10 UTC
rendered paste body
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;