Fórum Fusão de JPG´s #173008
04/08/2003
0
A dúvida é a seguinte: Tenho 4 arquivos jpg e preciso unir esses arquivos em um só, via programação, gerando assim um terceiro arquivo que seria como um ´retrato´ dos 4 lado a lado. Se alguém puder ajudar, agradeço.
Earmarques
Curtir tópico
+ 0
Responder
Posts
05/08/2003
Robotizar
Olha só amigo
vc pode usar um Timage usar o comando draw e depois salvar
não estou com o delphi aberto por isso os códigos podem estar errados mais vou dizer mais ou menos
Suponhamos que vc tenha 4 img de 32 X 32
ponha um Timage de 64 X 64vou chamalo de tela
e as quatros img vc tem que carregar em variaveis do tipo bitmap
ponha os seguintes comandos
TEla.canvas.draw(0,0,BMp1);
Tela.canvas.draw(32,0,BMP2);
tela.canvas.draw(0,32,Bmp3);
tela.canvas.draw(32,32,Bmp4);
assim ele carregara as quatros imgs no Timage depois basta salvar
naum sei o comando ao certo acho q é
Tela.picture.bitmap.saveTofile(´C:\Fotos.bmp´);
acho q é isso amigo
abraços
vc pode usar um Timage usar o comando draw e depois salvar
não estou com o delphi aberto por isso os códigos podem estar errados mais vou dizer mais ou menos
Suponhamos que vc tenha 4 img de 32 X 32
ponha um Timage de 64 X 64vou chamalo de tela
e as quatros img vc tem que carregar em variaveis do tipo bitmap
ponha os seguintes comandos
TEla.canvas.draw(0,0,BMp1);
Tela.canvas.draw(32,0,BMP2);
tela.canvas.draw(0,32,Bmp3);
tela.canvas.draw(32,32,Bmp4);
assim ele carregara as quatros imgs no Timage depois basta salvar
naum sei o comando ao certo acho q é
Tela.picture.bitmap.saveTofile(´C:\Fotos.bmp´);
acho q é isso amigo
abraços
Responder
Gostei + 0
05/08/2003
Marcelo Saviski
Seguindo o mesmo principio do Robotizar...
Declare [color=blue:6fa1abd5f6]JPEG [/color:6fa1abd5f6]no [b:6fa1abd5f6]uses[/b:6fa1abd5f6]
e use ela assim:
para teste, coloque 5 [color=red:6fa1abd5f6]Images [/color:6fa1abd5f6]no form, altere a propriedade [color=red:6fa1abd5f6]Strech [/color:6fa1abd5f6]e [color=red:6fa1abd5f6]Proportional [/color:6fa1abd5f6]para [color=blue:6fa1abd5f6]True[/color:6fa1abd5f6]
nos [color=red:6fa1abd5f6]Images [/color:6fa1abd5f6]1,2,3,4 coloque diferentes imagens, e claro, elas tem que ser JPGs ou JPEGs, e o 5 deixe em branco;
coloque um botão(´Mesclar´), e no evento on click:
testei ela inclusive com Imagens de Tamanhos diferentes, e ela se mostrou eficaz, caso queira salvar, faça um [i:6fa1abd5f6]Image5.SavetoFile(´Arquivo.jpg´);[/i:6fa1abd5f6]
mas você não presisa realmente do Image5, usei apenas como exemplo, caso não queira exibir a imagem e salvar direto pode usar esse código:
[color=green:6fa1abd5f6][b:6fa1abd5f6]--------------------------------------------[/b:6fa1abd5f6][/color:6fa1abd5f6]Explicando a função:
[color=darkblue:6fa1abd5f6]A função Retorna um Graphic, que é o tipo que armazena os JPEGs nos Images;
NumX, NumY é a posição do meio, onde o 4º JPG será desenhado[/color:6fa1abd5f6]
[color=darkblue:6fa1abd5f6]BMP := TBitmap.Create; Criamos um lugar aonde desenhar as imagem, antes de passar como resultado da função, uso o BMP por poder usar o canvas dele[/color:6fa1abd5f6]
[color=darkblue:6fa1abd5f6]
isto calcula o tamanho final da imagem, o tamanho que vai ficar quando unir as 4 Imagens[/color:6fa1abd5f6]
[color=darkblue:6fa1abd5f6]Isso calcula o ´meio´da imagem[/color:6fa1abd5f6]
[color=darkblue:6fa1abd5f6]Desenhamos os JPEGs na variavel BMP[/color:6fa1abd5f6]
[color=darkblue:6fa1abd5f6]Passamos o BMP como resultado, só que transformamos ele de BMP (Bitmap) para um Tipo Graphic (no caso JPG ou JPEG)[/color:6fa1abd5f6]
BMP.Free; [color=darkblue:6fa1abd5f6]Liberamos o nosso BMP[/color:6fa1abd5f6]
Espero ter ajudado :wink:
Declare [color=blue:6fa1abd5f6]JPEG [/color:6fa1abd5f6]no [b:6fa1abd5f6]uses[/b:6fa1abd5f6]
function MesclaJpgs(Jpg1, Jpg2, Jpg3, Jpg4 : TGraphic): Tgraphic; var NumX, NumY : integer; BMP : TBitmap; begin BMP := TBitmap.Create; try with BMP do begin if (Jpg1.Width + Jpg2.Width) > (Jpg3.Width + Jpg4.Width) then Width := Jpg1.Width + Jpg2.Width else Width := Jpg3.Width + Jpg4.Width; if (Jpg1.Height + Jpg3.Height) > (Jpg2.Height + Jpg4.Height) then Height := Jpg1.Height + Jpg2.Height else Height := Jpg3.Height + Jpg4.Height; if JPG1.Width > JPG3.Width then NumX := Jpg1.Width else NumX := Jpg3.Width; if JPG1.Height > JPG2.Height then NumY := Jpg1.Height else NumY := Jpg2.Height; Canvas.Draw(0,0, Jpg1); Canvas.Draw(NumX,0, Jpg2); Canvas.Draw(0,NumY, Jpg3); Canvas.Draw(NumX,NumY, Jpg4); end; Result := TJPEGImage.Create; Result.Assign(BMP); finally BMP.Free; end; end;
e use ela assim:
para teste, coloque 5 [color=red:6fa1abd5f6]Images [/color:6fa1abd5f6]no form, altere a propriedade [color=red:6fa1abd5f6]Strech [/color:6fa1abd5f6]e [color=red:6fa1abd5f6]Proportional [/color:6fa1abd5f6]para [color=blue:6fa1abd5f6]True[/color:6fa1abd5f6]
nos [color=red:6fa1abd5f6]Images [/color:6fa1abd5f6]1,2,3,4 coloque diferentes imagens, e claro, elas tem que ser JPGs ou JPEGs, e o 5 deixe em branco;
coloque um botão(´Mesclar´), e no evento on click:
Image5.Picture.Graphic := MesclaJpgs(Image1.Picture.Graphic,Image2.Picture.Graphic,Image3.Picture.Graphic,Image4.Picture.Graphic);
testei ela inclusive com Imagens de Tamanhos diferentes, e ela se mostrou eficaz, caso queira salvar, faça um [i:6fa1abd5f6]Image5.SavetoFile(´Arquivo.jpg´);[/i:6fa1abd5f6]
mas você não presisa realmente do Image5, usei apenas como exemplo, caso não queira exibir a imagem e salvar direto pode usar esse código:
MesclaJpgs(Image1.Picture.Graphic,Image2.Picture.Graphic,Image3.Picture.Graphic,Image4.Picture.Graphic).SavetoFile(´Imagem.jpeg´);
[color=green:6fa1abd5f6][b:6fa1abd5f6]--------------------------------------------[/b:6fa1abd5f6][/color:6fa1abd5f6]Explicando a função:
function MesclaJpgs(Jpg1, Jpg2, Jpg3, Jpg4 : TGraphic): TGraphic; var NumX, NumY : integer; BMP : TBitmap; begin
[color=darkblue:6fa1abd5f6]A função Retorna um Graphic, que é o tipo que armazena os JPEGs nos Images;
NumX, NumY é a posição do meio, onde o 4º JPG será desenhado[/color:6fa1abd5f6]
BMP := TBitmap.Create; try with BMP do begin if (Jpg1.Width + Jpg2.Width) > (Jpg3.Width + Jpg4.Width) then Width := Jpg1.Width + Jpg2.Width else Width := Jpg3.Width + Jpg4.Width; if (Jpg1.Height + Jpg3.Height) > (Jpg2.Height + Jpg4.Height) then Height := Jpg1.Height + Jpg2.Height else Height := Jpg3.Height + Jpg4.Height; if JPG1.Width > JPG3.Width then NumX := Jpg1.Width else NumX := Jpg3.Width; if JPG1.Height > JPG2.Height then NumY := Jpg1.Height else NumY := Jpg2.Height;
[color=darkblue:6fa1abd5f6]BMP := TBitmap.Create; Criamos um lugar aonde desenhar as imagem, antes de passar como resultado da função, uso o BMP por poder usar o canvas dele[/color:6fa1abd5f6]
if (Jpg1.Width + Jpg2.Width) > (Jpg3.Width + Jpg4.Width) then Width := Jpg1.Width + .......... ight := Jpg3.Height + Jpg4.Height;
isto calcula o tamanho final da imagem, o tamanho que vai ficar quando unir as 4 Imagens[/color:6fa1abd5f6]
if JPG1.Width > JPG ........ Jpg2.Height;
[color=darkblue:6fa1abd5f6]Isso calcula o ´meio´da imagem[/color:6fa1abd5f6]
Canvas.Draw(0,0, Jpg1); Canvas.Draw(NumX,0, Jpg2); Canvas.Draw(0,NumY, Jpg3); Canvas.Draw(NumX,NumY, Jpg4);
[color=darkblue:6fa1abd5f6]Desenhamos os JPEGs na variavel BMP[/color:6fa1abd5f6]
Result := TJPEGImage.Create; Result.Assign(BMP); finally BMP.Free;
[color=darkblue:6fa1abd5f6]Passamos o BMP como resultado, só que transformamos ele de BMP (Bitmap) para um Tipo Graphic (no caso JPG ou JPEG)[/color:6fa1abd5f6]
BMP.Free; [color=darkblue:6fa1abd5f6]Liberamos o nosso BMP[/color:6fa1abd5f6]
Espero ter ajudado :wink:
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)