Como escolher aonde salvar a imagem

8 respostas Resolvido
programação
Jacksonn123

Nesse exemplo ele salva direto no c:/ , quero fazer com que o usuário escolhesse o local aonde ele quer salvar. (linguagem de programação Lazarus)

procedure TformMain.btSalvarImagem1Click(Sender: TObject);
var
  bmp: TBitmap;
  R: TRect;
  png : TPortableNetworkGraphic;
begin
  // bmp, png
  bmp := TBitmap.Create;
  png := TPortableNetworkGraphic.Create;

  try
    // bmp
    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('c:/barcode2.png');

  finally
    bmp.Free;
    png.Free;
  end;
end;

8 Respostas

FearX

Oi, Jacksonn123. Tudo bem?

Primeira coisa: Você poderia formatar seu código, por favor? Basta selecionar ele e clicar no botão </> ou então apertar CTRL + SHIFT + C.

Segundo: Basta você pedir para o usuário digitar o caminho, salvar numa String e colocar ela como o caminho. Não conheço Lazarus, mas essa é a lógica básica para isso.

Espero ter dado um esclarecimento,

[]'s

TerraSkilll

Use o componente SaveDialog, que abre a janela de “Salvar Como”, como muitos programas fazem.

Veja um exemplo em: http://wiki.freepascal.org/Howto_Use_TSaveDialog

Abraço.

Jacksonn123

Consegui, Valeu pessoal.

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

R := Rect(0, 0, BarcodeQR1.Width, BarcodeQR1.Height);

bmp.SetSize(BarcodeQR1.Width, BarcodeQR1.Height);

bmp.Canvas.Brush.Color := clWhite;

bmp.Canvas.FillRect®;

BarcodeQR1.PaintOnCanvas(bmp.Canvas, R);

png.Assign(bmp);

png.SaveToFile(SavepictureDialog1.Filename);

finally

bmp.Free;

png.Free;

end;

end;
TerraSkilll
Solucao aceita

Seu código tem um problema. Quando você usa um if, você precisa envolver todos os comandos que dependem desse if dentro de um bloco begin…end, da mesma forma que usaria chaves {} em uma linguagem como Java. Se não fizer isso, apenas a linha abaixo do if será afetada pela condição.

Faça o seguinte:

try
// bmp
if SavePictureDialog1.Execute then
begin // faltou esse begin
  R := Rect(0, 0, BarcodeQR1.Width, BarcodeQR1.Height);
  bmp.SetSize(BarcodeQR1.Width, BarcodeQR1.Height);
  bmp.Canvas.Brush.Color := clWhite;
  bmp.Canvas.FillRect®;
  BarcodeQR1.PaintOnCanvas(bmp.Canvas, R);
  png.Assign(bmp);
  png.SaveToFile(SavepictureDialog1.Filename);
end; // e esse end aqui
finally
  bmp.Free;
  png.Free;
end;

Se você deixar do jeito que está, e o usuário clicar em “Cancelar” no SaveDialog, a linha R := Rect(0, 0, BarcodeQR1.Width, BarcodeQR1.Height); não será executada (deixando o Rect como null/nil), mas as demais sim, o que provavelmente vai causar bugs no código.

Abraço.

Jacksonn123

Obrigado, ajeitei ele =D

rodriguesabner

Jacksonn, marca a resposta que te ajudou como resolvida, por favor!

Jacksonn123

como faço isso ?

rodriguesabner

Opa, vi que já conseguiu. Valeu!

Criado 11 de fevereiro de 2019
Ultima resposta 12 de fev. de 2019
Respostas 8
Participantes 4