Usar TImage em tempo de execução
30/03/2006
0
Iuri
Posts
30/03/2006
Michael
A forma que vc mostrou para instanciar um objeto da classe [b:43e4c9dac0]TImage [/b:43e4c9dac0]está estranha. O [b:43e4c9dac0]Owner [/b:43e4c9dac0]informado no construtor não deveria ser o próprio objeto, e sim outro.
Se vc sabe o tempo de vida do componente, isto é, se é vc quem vai criá-lo e destruí-lo - como parece ser o seu caso - então use [b:43e4c9dac0]nil [/b:43e4c9dac0]no construtor:
var Imagem: TImage; begin Image := TImage.Create(nil); try // Faz alguma coisa com Imagem finally Imagem.Free; end; end;
Porém, se vc só quiser manipular imagens, pode usar a classe [b:43e4c9dac0]TPicture [/b:43e4c9dac0]ao invés de [b:43e4c9dac0]TImage[/b:43e4c9dac0]. Ela permite manipular arquivos vários arquivos de imagens, inclusive JPEG (inclua a unit [b:43e4c9dac0]JPEG [/b:43e4c9dac0]na cláusula uses do seu código).
Se quiser trabalhar somente com imagens JPEG, então use a classe [b:43e4c9dac0]TJPEGImage[/b:43e4c9dac0], localizada tbm na unit [b:43e4c9dac0]JPEG[/b:43e4c9dac0].
Por fim, para converter JPEG para Bitmaps, e vice-versa, basta usar o método [b:43e4c9dac0]Assign[/b:43e4c9dac0]:
var Bitmap: TBitmap; Jpg: TJPEGImage; begin Bitmap := TBitmap.Create; Jpg := TJPEGImage.Create; try Bitmap.LoadFromFile(´Arquivo.bmp´); Jpg.Assign(Bitmap); Jpg.SaveToFile(´Arquivo.jpg´); finally Bitmap.Free; Jpg.Free; end; end;
[]´s
30/03/2006
Iuri
abs
30/03/2006
Iuri
30/03/2006
Iuri
Ou o único modo de eu resolver o meu problema é convertendo a imagem para bitmap, manipulando e enfim reconvertendo para jpeg? Valeu!
30/03/2006
Massuda
31/03/2006
Iuri
Mas aí houve um outro problema: ao converter o JPEGImage para o Bitmap e mandar fazer um método que fazia corretamente quando carregava do TImage no form (o método interpolava duas imagens e mandava pra um terceira), o método não funciona, acho que por causa de algum erro na hora da conversão, pois quando mando o bitmap diretamente, sem converter o jpegimage para bitmap, funciona de forma correta.
Pus o código para ficar mais claro:
function Classe.Interpolar(imagem1, imagem2 : TBitmap) : TBitmap; var x,y : integer; Pixel, Pixel2, Pixel3 : PByte; imagem3 : TBitmap; begin imagem3 := TBitmap.Create; imagem3.LoadFromFile(´x.bmp´); x := 0; for y := 0 to imagem1.Height-1 do begin Pixel := imagem1.Scanline[y]; Pixel2 := imagem2.Scanline[y]; Pixel3 := imagem3.Scanline[y]; while x <> (imagem1.Width-1) do begin Pixel3^ := round((Pixel^ + Pixel2^)/2); inc(Pixel); inc(Pixel2); inc(Pixel3); inc(x); end; end; Result := imagem3; end;
Valeu de novo!
05/04/2006
Iuri
05/04/2006
Massuda
Assumindo que imagem1 e imagem2 tem o mesmo tamanho, bastaria fazer...
... imagem3 := TBitmap.Create; imagem3.Width := imagem1.Width; imagem3.Height := imagem1.Height; ...
05/04/2006
Christian_adriano
{ Converte uma Imagem Jpeg (jpg) para BMP } procedure ConverteJpegToBmp(Img: TImagem); var Jpeg: TJPEGImage; bmp: TBitmap; begin Jpeg := TJPEGImage.Create; try Jpeg.CompressionQuality := 20; Jpeg.Assign(Img.Picture.Graphic); Jpeg.PixelFormat := TJPEGPixelFormat(0); {0 = 8Bits / 1 = 24Bits} Jpeg.GrayScale := True; {Apenas tons de cinza} Jpeg.Performance := TJPEGPerformance(0); {0 = Baixa Resolução / 1 = AltaResolução} Jpeg.ProgressiveDisplay := True; {Display Progressivo} bmp := TBitmap.Create; bmp.Assign(Jpeg); { ..................................... ..................................... } finally FreeAndNil(Jpeg); FreeAndNil(bmp); end; end;
Espero q ajude.
[]´s.
07/04/2006
Iuri
18/09/2006
Pabresco
Eu uso Delphi 7 e interBase 7.5.
Ficarei muito grato se alguém puder me ajudar.
Abraços![/img]
Clique aqui para fazer login e interagir na Comunidade :)