| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Seg Abr 09, 2012 12:01 am Assunto: [Dúvida] Como fazer um recorte de Imagem? |
|
|
Boa Noite Amigos e Feliz Páscoa para todos!
Bom, vamos a minha dúvida que é a seguinte:
Como posso fazer uma seleção com o mouse e depois clicar em um botão do tipo recorte e recortar a parte de fora da área selecionada?
Veja:
Primeiro eu seleciono a imagem com o mouse
http://img827.imageshack.us/img827/7909/recortev.th.jpg
Depois clico em recortar e fica a parte de dentro da área selecionada assim:
http://img836.imageshack.us/img836/7898/recorte2c.th.jpg
Alguém pode me ajudar nessa questão?
Obrigado à todos!! |
|
| Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
|
| Voltar ao Topo |
|
 |
joao_arthur Profissional


Registrado: Sexta-Feira, 10 de Novembro de 2006 Mensagens: 687 Localização: Fortaleza-CE
|
Enviada: Seg Abr 09, 2012 6:42 pm Assunto: |
|
|
| Código: | function TForm1.CortarImagem(Imagem: TGraphic; Valores: TRect): TBitmap;
var
bmp, tbmp: TBitmap;
drect: TRect;
begin
bmp := TBitmap.Create;
bmp.Height := Valores.Bottom - Valores.Top;
bmp.Width := Valores.Right - Valores.Left;
drect := Bounds(0, 0, bmp.Width, bmp.Height);
//drect := Bounds(Valores.Left,Valores.Top,Valores.Right,Valores.Bottom);
try
tbmp := TBitmap.Create;
tbmp.Height := Imagem.Height;
tbmp.Width := Imagem.Width;
tbmp.Canvas.Draw(0,0,Imagem);
bmp.Canvas.CopyRect(drect, tbmp.Canvas, Valores);
Result := bmp;
finally
tbmp.Free;
end;
end; |
_________________ João Arthur. |
|
| Voltar ao Topo |
|
 |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Seg Abr 09, 2012 11:02 pm Assunto: |
|
|
Olá amigo obrigado por responder!
Bom eu já havia tentado seguir esse tutorial mais travei na seguinte parte:
| Código: |
for I := pInicio.X to pFim.X do
for J := pInicio.Y to pFim.Y do
Image2.Canvas.Pixels[I, J] := Image1.Canvas.Pixels[I, J];
|
Você tentou usar ele?
Bom deu uns erros aqui, ai eu acrescentei um Var ficando assim:
| Código: |
var
i, j : integer;
for I := pInicio.X to pFim.X do
for J := pInicio.Y to pFim.Y do
Image2.Canvas.Pixels[I, J] := Image1.Canvas.Pixels[I, J];
|
Agora já roda mais nada acontece...gilsonnrodrigues você pode em ajudar? Obrigado! |
|
| Voltar ao Topo |
|
 |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Seg Abr 09, 2012 11:19 pm Assunto: |
|
|
| joao_arthur escreveu: | | Código: | function TForm1.CortarImagem(Imagem: TGraphic; Valores: TRect): TBitmap;
var
bmp, tbmp: TBitmap;
drect: TRect;
begin
bmp := TBitmap.Create;
bmp.Height := Valores.Bottom - Valores.Top;
bmp.Width := Valores.Right - Valores.Left;
drect := Bounds(0, 0, bmp.Width, bmp.Height);
//drect := Bounds(Valores.Left,Valores.Top,Valores.Right,Valores.Bottom);
try
tbmp := TBitmap.Create;
tbmp.Height := Imagem.Height;
tbmp.Width := Imagem.Width;
tbmp.Canvas.Draw(0,0,Imagem);
bmp.Canvas.CopyRect(drect, tbmp.Canvas, Valores);
Result := bmp;
finally
tbmp.Free;
end;
end; |
|
Olá senhor joao_arthur, obrigado por me ajudar!
Bom, tentei usar a sua função mais também não obtive êxito, veja o processo que realizei.
Coloquei a função:
function CortarImagem(Imagem: TGraphic; Valores: TRect): TBitmap;
Em private e gerou a função abaixo:
function TForm1.CortarImagem(Imagem: TGraphic; Valores: TRect): TBitmap;
Coloquei o código que você postou...mas e agora? Basta selecionar com o Mouse? se for isto não deu certo. Não sei o que fazer, você pode me mostrar onde estou errando?
Obrigado! |
|
| Voltar ao Topo |
|
 |
joao_arthur Profissional


Registrado: Sexta-Feira, 10 de Novembro de 2006 Mensagens: 687 Localização: Fortaleza-CE
|
Enviada: Ter Abr 10, 2012 9:05 am Assunto: |
|
|
cara manda pra função um TGraphic e as coordenadas, voce pode utilizar um TImage ou outro componente que le permita fazer uma seleção da imagem pegando as coordenadas, aqui eu utilizo o ImageEn mas acho que da pra fazer no TImage da uma olhada nos eventos deve ter alguma coisa relacionada ao mouse. _________________ João Arthur. |
|
| Voltar ao Topo |
|
 |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Ter Abr 10, 2012 11:03 pm Assunto: |
|
|
| joao_arthur escreveu: | | cara manda pra função um TGraphic e as coordenadas, |
Essa parte eu não entendi...Pode me ajudar a entender?
Obrigado! |
|
| Voltar ao Topo |
|
 |
joao_arthur Profissional


Registrado: Sexta-Feira, 10 de Novembro de 2006 Mensagens: 687 Localização: Fortaleza-CE
|
Enviada: Qua Abr 11, 2012 12:50 pm Assunto: |
|
|
| Código: | | imgCrop.Picture.Bitmap := CortarImagem(imgSource.Picture.Graphic,Bounds(left,top,right,bottom)); |
_________________ João Arthur. |
|
| Voltar ao Topo |
|
 |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Qui Abr 12, 2012 12:00 am Assunto: |
|
|
| joao_arthur escreveu: | | Código: | | imgCrop.Picture.Bitmap := CortarImagem(imgSource.Picture.Graphic,Bounds(left,top,right,bottom)); |
|
Olá mais uma vez joao_arthur,
Na linha de comando que você postou onde devo colocar? Tente em alguns lugares mais esta dando erro no imgCrop.
Veja:
[Error] Unit1.pas(37): Undeclared identifier: 'imgCrop'
Desculpe! Parece que quero tudo mastigado mais estou tentando mesmo!! É que me falat o conhecimento.
Muito Obrigado!
OBS.: No próprio código tem uma parte desabilitada com as barras // era para por ali? |
|
| Voltar ao Topo |
|
 |
joao_arthur Profissional


Registrado: Sexta-Feira, 10 de Novembro de 2006 Mensagens: 687 Localização: Fortaleza-CE
|
Enviada: Qui Abr 12, 2012 10:53 am Assunto: |
|
|
o imgCrop é um TImage ou algum componente de imagem, voce colocou no form um TImage ? _________________ João Arthur. |
|
| Voltar ao Topo |
|
 |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Sex Abr 13, 2012 1:33 pm Assunto: |
|
|
Desculpe a demora é qeu não pude usar o PC ontem...
O erro agora é este:
[Error] Unit1.pas(44): Undeclared identifier: 'imgSource'
Obrigado! |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sex Abr 13, 2012 6:51 pm Assunto: |
|
|
JR10, acredito que o "imgSource" também seja um componente TImage, que no caso recebe a imagem de origem. Portanto você vai ter dois componentes TImage no formulário: um com a imagem original e outra com a imagem cortada.
Abraço! |
|
| Voltar ao Topo |
|
 |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Sex Abr 13, 2012 8:47 pm Assunto: |
|
|
| Batera escreveu: | JR10, acredito que o "imgSource" também seja um componente TImage, que no caso recebe a imagem de origem. Portanto você vai ter dois componentes TImage no formulário: um com a imagem original e outra com a imagem cortada.
Abraço! |
Batera você estava certo!
Porém eu gostaria de mostrar no mesmo TImage e não em outro componente... Tem como?
Meu código esta assim:
| Código: |
var
bmp, tbmp: TBitmap;
drect: TRect;
begin
bmp := TBitmap.Create;
bmp.Height := Valores.Bottom - Valores.Top;
bmp.Width := Valores.Right - Valores.Left;
drect := Bounds(0, 0, bmp.Width, bmp.Height);
image1.Picture.Bitmap := CortarImagem(image1.Picture.Graphic,Bounds(left,top,Height,bottom));
try
tbmp := TBitmap.Create;
tbmp.Height := Imagem.Height;
tbmp.Width := Imagem.Width;
tbmp.Canvas.Draw(0,0,Imagem);
bmp.Canvas.CopyRect(drect, tbmp.Canvas, Valores);
Result := bmp;
finally
tbmp.Free;
end;
end; |
Veja que coloquei o nome do TImage1 no lugar do imgCrop e do imgSource e agora deu erro em:
| Código: |
[Error] Unit1.pas(44): Undeclared identifier: 'bottom'
|
|
|
| Voltar ao Topo |
|
 |
JR10 Aprendiz


Registrado: Domingo, 14 de Março de 2010 Mensagens: 170
|
Enviada: Dom Abr 15, 2012 10:37 pm Assunto: |
|
|
| Alguém por favor me de uma ajujdinha nesta dúvida... |
|
| Voltar ao Topo |
|
 |
joao_arthur Profissional


Registrado: Sexta-Feira, 10 de Novembro de 2006 Mensagens: 687 Localização: Fortaleza-CE
|
Enviada: Seg Abr 16, 2012 11:30 am Assunto: |
|
|
você tem que declarar essas variáveis (left,top,Height,bottom) e setar elas antes de chamar a função, essas variáveis são as coordenadas do recorte. _________________ João Arthur. |
|
| Voltar ao Topo |
|
 |
|