Como salvar em um arquivo de imagem o que tem dentro do Pane

Delphi

19/12/2004

Como faço para salvar em um arquivo de imagem todo o conjunto de imagens que estã dentro de um Panel?


Raserafim

Raserafim

Curtidas 0

Respostas

Marcelo Saviski

Marcelo Saviski

19/12/2004

vc quer coloca-las lado a lado em uma nova imagem?


GOSTEI 0
Raserafim

Raserafim

19/12/2004

o panel contém varios Timage (que foram criados dinamicamente em tempo de execução). Preciso salvar o modo como as imagens estão dispostas no panel, como se isso fosse uma imagem só.

É como se eu tivesse montado uma imagem juntando várias imagens e agora preciso salvar isto, ou seja, o conjunto de imagem (como se fosse apenas uma) que está dentro do panel.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

19/12/2004

Tente isso, deve servir de base:

var
  BMP: TBitmap;
  I: Integer;
begin
  BMP := TBitmap.Create;
  BMP.Width := Panel.Width;
  BMP.Height := Panel.Height;
  try
    for I := 0 to Panel.ConreolCount - 1 do
      if Panel.Controls[I] is TImage then
        with TImage(Panel.Controls[I]) do
          BMP.Canvas.Draw(Left, Top, Picture.Graphic);       
    BMP.SaveToFile(´Imagem.bmp´);
  finally
    BMP.Free;
  end;
end;


Se todas as imagens estiverem visíveis no panel, não tiver nenhuma que fique pra fora da área visível isso deve dar certo.


GOSTEI 0
Raserafim

Raserafim

19/12/2004

valeu pela atenção Marcelo,

mas o código ainda nao deu certo. Na linha:

BMP.Canvas.Draw(Left, Top, Picture.Graphic);

o parâmetro Picture.Graphic não existe, o que posso colocar no lugar dele?


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

19/12/2004

estranho, o Picture.Graphic deveria vir do componente Image que é feito um TypeCast aqui: [color=green:8feeddc5e6]with TImage(Panel.Controls[I]) do[/color:8feeddc5e6]

qual Delphi vc está usando?


GOSTEI 0
Raserafim

Raserafim

19/12/2004

já saquei o problema, mas não a solução.

o problema é que estou utilizando o componente TPaintBox (pois precisei que a imagem fosse repetida no componente todo, portanto preciso do evento OnPaint) ao invés do TImage.

Pelo que percebi não tem nenhuma propriedade do TPaintBox que seja TGraphics. Mas a idéia que tive é transformar o TPaintBox em TImage, tem alguma forma de copiar o que está no Canvas do TPaintBox para o TImage? ou se tiver outra solução melhor...


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

19/12/2004

ha tá, ai sim

só para tirar a dúvida, vcvtem só um paint box ou + de 1 dentro do panel?

se for só um, então pode fazer assim:

var 
  BMP: TBitmap; 
  I: Integer; 
  r: TRect;
begin 
  BMP := TBitmap.Create; 
  try 
    with PaintBox do 
    begin
      BMP.Width := Width; 
      BMP.Height := Height; 
      r := Rect(0, 0, Width, Height);
      BMP.Canvas.CopyRect(r, Canvas, r);      
    end;
    BMP.SaveToFile(´Imagem.bmp´); 
  finally 
    BMP.Free; 
  end; 
end;



GOSTEI 0
POSTAR