Como salvar a imagem png com fundo transparente

Estou utilizando este código em lazarus, mas na hora de salvar ele mostra uma parte preta como o da imagem, queria que ficasse branca/transparente mas testei umas maneiras e não deu certo.

procedure TformMain.btSalvarImagemClick(Sender: TObject);
var
  bmp: TBitmap;
  R: TRect;
  png : TPortableNetworkGraphic;
begin
  // bmp, png
  bmp := TBitmap.Create;
  png := TPortableNetworkGraphic.Create;
  try
  // bmp
  if SavePictureDialog1.Execute then
  begin
    R := Rect(500, 500, BarcodeQR1.Width, BarcodeQR1.Height);
    bmp.SetSize(600, 600);
    bmp.Canvas.Brush.Color := clWhite;
    bmp.Canvas.FillRect(R);
    BarcodeQR1.PaintOnCanvas(bmp.Canvas, R);
    png.Assign(bmp);
    png.SaveToFile(SavepictureDialog1.Filename);
  end;
  finally
    bmp.Free;
    png.Free;
  end;
  end;

1 curtida

Você usou outros visualizadores de imagem para verificar se o fundo é proveniente da sua imagem ou do app que está abrindo ele?

No windows 7 aqui só tenho o visualizador padrão dele, vou tentar baixar algum outro pra testar

Usei outro visualizador e continua preto.
peguei isso no Stack Overflow

bmp.TransparentColor := bmp.Canvas.Pixels[0,0]; bmp.Transparent := True;

e tmb não deu =x

Consegui

procedureTformMain.btSalvarImagem1Click(Sender: TObject);
var
  bmp: TBitmap;
  R: TRect;
  png : TPortableNetworkGraphic;
begin
  // bmp, png
  bmp := TBitmap.Create;
  png := TPortableNetworkGraphic.Create;
  try
 // bmp
 if SavePictureDialog1.Execute then
 begin
   BarcodeQR2.Height := 600;
   BarcodeQR2.Width := 600;
   R := Rect(0, 0, BarcodeQR2.Width, BarcodeQR2.Height);
   bmp.SetSize(BarcodeQR2.Width, BarcodeQR2.Height);
   bmp.Canvas.Brush.Color := clWhite;
   bmp.Canvas.FillRect(R);
   BarcodeQR2.PaintOnCanvas(bmp.Canvas, R);
   png.Assign(bmp);
   png.SaveToFile(SavepictureDialog1.Filename);
   BarcodeQR2.Height := 120;
   BarcodeQR2.Width := 105;
 end;
 finally
   bmp.Free;
   png.Free;
 end;
 end;

2 curtidas