利用GDI+,将png图像转换为jpg图像时,怎么设置png的透明背景色转换为jpg的白色背景色

利用GDI+,将png图像转换为jpg图像时,如何设置png的透明背景色转换为jpg的白色背景色
利用GDI+,将png图像转换为jpg图像时,如何设置png的透明背景色转换为jpg的白色背景色

  Image := TGPImage.Create('d:\test.png'); 
  GetEncoderClsid('image/jpeg', encoderClsid);
  TGPBitmap(image).SetResolution(150,50);
  image.Save('test.jpg', encoderClsid);
  image.Free;


上面只是转换部分的代码,已实现转换,但是转换出现问题:
原来png图片的透明背景色转到jpg图片后,就变成黑色的背景色了

问题:如何设置转换的时候能够转换为白色背景色

------解决方案--------------------
提供2段代码供参考:
Delphi(Pascal) code

procedure SaveJpg(Jpg: TGpBitmap; Filename: WideString; Quality: Integer);
var
  Clsid: TGUID;
  Parameters: TEncoderParameters;
begin
  // 设置编码品质参数
  Parameters.Count := 1;
  Parameters.Parameter[0].Guid := EncoderQuality;
  Parameters.Parameter[0].ValueType := EncoderParameterValueTypeLong;
  Parameters.Parameter[0].NumberOfValues := 1;
  Parameters.Parameter[0].Value := @Quality;
  GetEncoderClsid('image/jpeg', Clsid);
  Jpg.Save(Filename, Clsid, @Parameters);
end;

// GDI+画图像功能转换
procedure TForm1.Button1Click(Sender: TObject);
var
  Png: TGpBitmap;
  Jpg: TGpBitmap;
  g: TGpGraphics;
begin
  Png := TGpBitmap.Create('d:\xmas_011.png');
  Jpg := TGpBitmap.Create(Png.Width, Png.Height, pf24bppRGB);
  g := TGpGraphics.Create(Jpg);
  g.Clear($FFFFFFFF);  // 白色背景
  g.DrawImage(Png, 0, 0, Png.Width, png.Height);
  g.Free;
  SaveJpg(Jpg, 'd:\1.jpg', 95); // 保存图片,质量为95
  Jpg.Free;
  Png.Free;
end;

// 扫描线计算转换
procedure TForm1.Button2Click(Sender: TObject);
var
  Png: TGpBitmap;
  Jpg: TGpBitmap;
  pData, jData: TBitmapData;
  I, Count, Alpha: Integer;
  ps, pd: PRGBQuad;
begin
  Png := TGpBitmap.Create('d:\xmas_011.png');
  Jpg := TGpBitmap.Create(Png.Width, Png.Height, pf32bppRGB);
  pData := Png.LockBits(GpRect(0, 0, Png.Width, Png.Height),
    [imRead], pf32bppARGB);
  jData := Jpg.LockBits(GpRect(0, 0, Jpg.Width, Jpg.Height),
    [imWrite], pf32bppARGB);
  Count := jData.Width * jData.Height;
  ps := pData.Scan0;
  pd := jData.Scan0;
  for I := 1 to Count do
  begin
    Alpha := ps^.rgbReserved;
    // 前后2个255为RGB分量,255白色
    pd^.rgbBlue := (Alpha * (ps^.rgbBlue - 255)) div 255 + 255;
    pd^.rgbGreen := (Alpha * (ps^.rgbGreen - 255)) div 255 + 255;
    pd^.rgbRed := (Alpha * (ps^.rgbRed - 255)) div 255 + 255;
    Inc(ps);
    Inc(pd)
  end;
  Jpg.UnlockBits(jData);
  Png.UnlockBits(pData);
  SaveJpg(Jpg, 'd:\2.jpg', 95);  // 保存图片,质量为95
  Jpg.Free;
  Png.Free;
end;

------解决方案--------------------
Delphi(Pascal) code

type
  PRGBAType = ^TRGBAType;
  TRGBAType = record
    Red: Byte;
    Green: Byte;
    Blue: Byte;
    Alpha: Byte;
  end;
  PRGBType = ^TRGBType;
  TRGBType = record
    Red: Byte;
    Green: Byte;
    Blue: Byte;
  end;

function IntToByte(i: Integer): Byte;
begin
  if i > 255 then
    Result := 255
  else if i < 0 then
    Result := 0
  else
    Result := i;
end;