Fórum Usar TImage em tempo de execução #317864
30/03/2006
0
Iuri
Curtir tópico
+ 1Posts
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
Gostei + 0
30/03/2006
Iuri
abs
Gostei + 0
30/03/2006
Iuri
Gostei + 0
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!
Gostei + 0
30/03/2006
Massuda
Gostei + 0
30/03/2006
Iuri
Gostei + 0
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!
Gostei + 0
01/04/2006
Kroki
Gostei + 0
05/04/2006
Iuri
Gostei + 0
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; ...
Gostei + 0
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.
Gostei + 0
07/04/2006
Iuri
Gostei + 0
18/09/2006
Pabresco
Eu uso Delphi 7 e interBase 7.5.
Ficarei muito grato se alguém puder me ajudar.
Abraços![/img]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)