e possivel fazer um editor de imagem no delphi?
eu gostaria de saber se e possivel fazer um editor de imagens no delphi parecido com o paint.
obrigado
obrigado
Fzamara
Curtidas 0
Respostas
Basilio.sp
30/11/2003
Caro(a) fzamara,
Sim. No próprio Delphi já vem um exemplo.
Dê uma olhada na pasta de exemplos.
Sim. No próprio Delphi já vem um exemplo.
Dê uma olhada na pasta de exemplos.
GOSTEI 0
Jaguarnet7
30/11/2003
To fazendo um como projeto final. Se tiver alguma duvida poste aqui.
GOSTEI 0
Douglas Bitencourt
30/11/2003
Caros,
eu vinha procurando algo do tipo.
em um programa que estou desenvolvendo, preciso que o usuário selecione a imagem e recorte (como no photoshop) a imagem, selecionando a área desejada, que passará a ser sua imagem, e descartando o restante.
Procurei a pasta Exemplos mas não achei.
Se puder enviar alguma dica, ou onde achar agradeço.
[]s
Douglas.
eu vinha procurando algo do tipo.
em um programa que estou desenvolvendo, preciso que o usuário selecione a imagem e recorte (como no photoshop) a imagem, selecionando a área desejada, que passará a ser sua imagem, e descartando o restante.
Procurei a pasta Exemplos mas não achei.
Se puder enviar alguma dica, ou onde achar agradeço.
[]s
Douglas.
GOSTEI 0
Jaguarnet7
30/11/2003
Tente fazer o seguinte:
1 - Faca um retangulo onde o usuário quer recortar, e guarde em uma variável do tipo TRect( que guarda um retangulo).( Se ñ souber diga)
2 - Crie um Bitmap temporário e usando o metodo copyrect e a variável a Rect anterior.
3 - Dimencione o tamanho do TImage original para as dimencoes desejadas.
4 - Usando Draw cole a imagem da Variavel Bitmap no TImage principal.
Espero que não tenha ficado confuso. Qualquer dúvidas conte comigo.
1 - Faca um retangulo onde o usuário quer recortar, e guarde em uma variável do tipo TRect( que guarda um retangulo).( Se ñ souber diga)
2 - Crie um Bitmap temporário e usando o metodo copyrect e a variável a Rect anterior.
3 - Dimencione o tamanho do TImage original para as dimencoes desejadas.
4 - Usando Draw cole a imagem da Variavel Bitmap no TImage principal.
Espero que não tenha ficado confuso. Qualquer dúvidas conte comigo.
GOSTEI 0
Douglas Bitencourt
30/11/2003
Ola Jaguarnet7
entendi o que explicou, mas sinceramente não sei muito bem como implementar. Consigo trabalhar melhor com bds, mas a parte gráfica sou uma negação.
se tiver algum exemplo básico, eu agradeço.
[]s
Douglas.
entendi o que explicou, mas sinceramente não sei muito bem como implementar. Consigo trabalhar melhor com bds, mas a parte gráfica sou uma negação.
se tiver algum exemplo básico, eu agradeço.
[]s
Douglas.
GOSTEI 0
Marcelo Saviski
30/11/2003
Faça assim:
no OnCreate:
no OnDestroy:
coloque um OpenPictureDialog e um Botão Abrir Imagem
mude o Filtro p/ aceitar somente Bitmaps .bmp
no OnClick do Botão:
no OnPait:
crie uma variavel Point: TPoint global
no OnMouseDown faça:
no OnMouseMove
Adicione um Form2 e coloque um Image nele
no OnMouseUp
OBS: Não testei, pode dar erro com o nome de alguma propriedade, mas se der, tenta concertar ai, o básico é isso
[i:98f55b70b2][color=blue:98f55b70b2]Funcionou?[/color:98f55b70b2][/i:98f55b70b2]
var FBack: TBitmap; Image: TBitmap;
no OnCreate:
Fback := TBitmap.Create; Image := TBitmap.Create; DoubleBuffered := True;
no OnDestroy:
FBack.Free; Image.Free;
coloque um OpenPictureDialog e um Botão Abrir Imagem
mude o Filtro p/ aceitar somente Bitmaps .bmp
no OnClick do Botão:
if OpenPictureDialog .Execute then begin Image.LoadFromFile(OpenPictureDialog .FileName); FBack.Assign(Image); end;
no OnPait:
Canvas.Draw(0, 0, FBack);
crie uma variavel Point: TPoint global
no OnMouseDown faça:
Point.X := X; Point.Y := Y;
no OnMouseMove
if csClicked in ControlState then begin FBack.Canvas.Draw(0, 0, Image); FBack.Canvas.Rectangle(Point.X, Point.Y, X, Y); Canvas.Draw(0, 0, FBack); end;
Adicione um Form2 e coloque um Image nele
no OnMouseUp
FBack.Canvas.Draw(0, 0, Image); Canvas.Draw(0, 0, FBack); Form2.Show; Form2.Image.Bitmap.Canvas.CopyRect(Rect(0, 0, X - Point.X, Y - Point.Y), FBack.Canvas, Rect(Point.X, Point.Y, X, Y));
OBS: Não testei, pode dar erro com o nome de alguma propriedade, mas se der, tenta concertar ai, o básico é isso
[i:98f55b70b2][color=blue:98f55b70b2]Funcionou?[/color:98f55b70b2][/i:98f55b70b2]
GOSTEI 0
Douglas Bitencourt
30/11/2003
Obrigado Marcelo, irei testar e assim que o fizer retorno a ligação.. :)
[]s
Douglas.
[]s
Douglas.
GOSTEI 0
Beppe
30/11/2003
eu gostaria de saber se e possivel fazer um editor de imagens no delphi parecido com o paint.
obrigado
Paint? Que decadência!
Eu tô fazendo um FireWorks. 8)
Quanto a recortar a imagem, tb tem um exemplo no tópico de TCanvas.CopyMode no help do Delphi.
GOSTEI 0
Jaguarnet7
30/11/2003
[quote:fed0a72bed=´fzamara´]eu gostaria de saber se e possivel fazer um editor de imagens no delphi parecido com o paint.
obrigado
Paint? Que decadência!
Eu tô fazendo um FireWorks. 8)
Quanto a recortar a imagem, tb tem um exemplo no tópico de TCanvas.CopyMode no help do Delphi.[/quote:fed0a72bed]
Vc é bom mesmo! Um FIREWORKS, Agora vou te apurrinhar com minhas duvidas :))
GOSTEI 0
Beppe
30/11/2003
Ué, manda! 8)
GOSTEI 0
Adriano Santos
30/11/2003
gostei da idéia.
GOSTEI 0
Marcelo Saviski
30/11/2003
ó o Ataliba, cara, a quanto tempo você ja lida com o Delphi?
GOSTEI 0
Douglas Bitencourt
30/11/2003
valeu a dica ataliba! Obrigado! :)
E aproveitando a portunidade, vc poderia explicar um pouco de como funciona a lógica de desenvolver aplicações gráficas, voltadas para a área de edição de imagens?
Agradeço por demais...
[]s
Douglas.
E aproveitando a portunidade, vc poderia explicar um pouco de como funciona a lógica de desenvolver aplicações gráficas, voltadas para a área de edição de imagens?
Agradeço por demais...
[]s
Douglas.
GOSTEI 0
Beppe
30/11/2003
|ó o Ataliba, cara, a quanto tempo você ja lida com o Delphi?
Há nem três (atarefados) anos. Mas que eu comecei a fazer programas úteis faz um meizim soh. 8)
|E aproveitando a portunidade, vc poderia explicar um pouco de como funciona a lógica de desenvolver
|aplicações gráficas, voltadas para a área de edição de imagens?
Quando eu terminar meu ´Fireworks´, eu vou escrever um artigo sobre como se beneficiar de OO na vida real, e como foi desenvolver o programa.
Mas isso vai demorar. As ´míseras´ 1.5 KLOC que já escrevi são apenas 20¬ do que espero. Mas já tem as estruturas fortes.
Em 1 ou 2 dias espero publicar um pequeno programa que fiz numa tentativa de eliminar o efeito de cintilização.
Há nem três (atarefados) anos. Mas que eu comecei a fazer programas úteis faz um meizim soh. 8)
|E aproveitando a portunidade, vc poderia explicar um pouco de como funciona a lógica de desenvolver
|aplicações gráficas, voltadas para a área de edição de imagens?
Quando eu terminar meu ´Fireworks´, eu vou escrever um artigo sobre como se beneficiar de OO na vida real, e como foi desenvolver o programa.
Mas isso vai demorar. As ´míseras´ 1.5 KLOC que já escrevi são apenas 20¬ do que espero. Mas já tem as estruturas fortes.
Em 1 ou 2 dias espero publicar um pequeno programa que fiz numa tentativa de eliminar o efeito de cintilização.
GOSTEI 0
Douglas Bitencourt
30/11/2003
Está Feito!
Espero ansioso por estas notícias...
Saudações e Boa Sorte ae.
Douglas.
Espero ansioso por estas notícias...
Saudações e Boa Sorte ae.
Douglas.
GOSTEI 0
Cebikyn
30/11/2003
Se interessar a alguém, existe uma coleção de componentes (que [b:0c036954c4]vem com código fonte[/b:0c036954c4]) excelente para criar editores de imagems, faz várias coisas interessantes nesta área (layers, textos, transparência, operações com pixels, poligonos, redimensionamento e rotação de imagens sem perda de qualidade, etc), tudo usando Bitmaps de 32 bits (suporta todos os formatos de imagem, mas estes são convertidos para bitmap antes de receberem qualquer efeito) usa códigos de double-buffering otimizado (completamente sem cintilação) e os códigos são muito rápidos, valhe a pena conferir. A baixo está uma foto do exemplo de layers vetoriais:
Vocês podem obter os componentes e os códigos fontes em: http://www.g32.org/graphics32/index.html
Se vc ainda não se convenceu de que valhe a pena conferir, veja o algumas coisinhas implementadas (copiado direto do site):[list:0c036954c4][*:0c036954c4]Fast per-pixel access up to 100 times faster compared to standard TCanvas/TBitmap;
[*:0c036954c4]Bitmap alpha blending (including per-pixel alpha blending);
[*:0c036954c4]Pixel, line and polygon antialiasing (combined with alpha blending);
[*:0c036954c4]Locking the bitmap for safe multithreading;
[*:0c036954c4]Enhanced scaling of bitmaps;
[*:0c036954c4]Affine transformations of bitmaps: rotations, scaling, etc. with sub-pixel accuracy;
[*:0c036954c4]Arbitrary projective transformations of bitmaps;
[*:0c036954c4]Flicker-free image displaying components with optimized double buffering;
[*:0c036954c4]Multiple customizable easy-to-use overlay layers;[/list:u:0c036954c4]
Vocês podem obter os componentes e os códigos fontes em: http://www.g32.org/graphics32/index.html
Se vc ainda não se convenceu de que valhe a pena conferir, veja o algumas coisinhas implementadas (copiado direto do site):[list:0c036954c4][*:0c036954c4]Fast per-pixel access up to 100 times faster compared to standard TCanvas/TBitmap;
[*:0c036954c4]Bitmap alpha blending (including per-pixel alpha blending);
[*:0c036954c4]Pixel, line and polygon antialiasing (combined with alpha blending);
[*:0c036954c4]Locking the bitmap for safe multithreading;
[*:0c036954c4]Enhanced scaling of bitmaps;
[*:0c036954c4]Affine transformations of bitmaps: rotations, scaling, etc. with sub-pixel accuracy;
[*:0c036954c4]Arbitrary projective transformations of bitmaps;
[*:0c036954c4]Flicker-free image displaying components with optimized double buffering;
[*:0c036954c4]Multiple customizable easy-to-use overlay layers;[/list:u:0c036954c4]
GOSTEI 0
30/11/2003
[list:cdf57bf060][*:cdf57bf060]Fast per-pixel access up to 100 times faster compared to standard TCanvas/TBitmap;
[*:cdf57bf060]Bitmap alpha blending (including per-pixel alpha blending);
[*:cdf57bf060]Pixel, line and polygon antialiasing (combined with alpha blending);
[*:cdf57bf060]Locking the bitmap for safe multithreading;
[*:cdf57bf060]Enhanced scaling of bitmaps;
[*:cdf57bf060]Affine transformations of bitmaps: rotations, scaling, etc. with sub-pixel accuracy;
[*:cdf57bf060]Arbitrary projective transformations of bitmaps;
[*:cdf57bf060]Flicker-free image displaying components with optimized double buffering;
[*:cdf57bf060]Multiple customizable easy-to-use overlay layers;[/list:u:cdf57bf060]
:shock: [b:cdf57bf060]Gãhnnnnnnnn ???????????????[/b:cdf57bf060]
Só vou fazer o download por curiosidade.... hehehehhehhee!
GOSTEI 0
Beppe
30/11/2003
Eu já o vi há bastante tempo atrás. Esse Graphics32 é muito eficiente para efeitos, etc. Vem um exemplo de animação muito legal btw. Mas não oferece suporte a edição(ao menos na versão que eu tinha) dos layers, só lente de aumento, espirais.
GOSTEI 0
Marcelo Saviski
30/11/2003
Tem uma pagina boa com links sobre coisas com relação a graficos aqui: http://homepages.borland.com/efg2lab/Library/Delphi/Graphics/ImageProcessing.htm
GOSTEI 0
Beppe
30/11/2003
valeu a dica ataliba! Obrigado! :)
E aproveitando a portunidade, vc poderia explicar um pouco de como funciona a lógica de desenvolver aplicações gráficas, voltadas para a área de edição de imagens?
Agradeço por demais...
[]s
Douglas.
Depende do tipo de aplicação.
Há as que cortam o bitmap em pedacinhos e salvam em arquivos, editores simples como o paint, editores sofisticados como os vetoriais, etc...
Por exemplo, para fazer um editor como o paint, é simples:
Você guarda a imagem em um bitmap(quando em outros formatos, você converte e exporta, para usar apenas bitmaps), e a desenha num paint box. Quando você desenha você faz isso no bitmap e reflete as mudanças na tela também.
Agora, fazer um ´FireWorks´ envolve coisas muito complicadas:
Não existe nenhum bitmap. A área de desenho é simplesmente uma largura(width), altura(height) e cor de fundo(possivelmente transparente).
Cada ferramenta trabalha em cima de um layer. Estes layers são de dois tipos: vetorial e rasterizado. Um layer vetorial precisa calcular cada pixel a cada vez que é refletido na tela, são as figuras geométricas. Já os rasterizados não podem fazer estes cálculos, por isso não ficam bem redimensionadaos. Suas subclasses são pincel, lápis, spray, imagem, etc.
Na hora de exibir na tela, preenchemos com a cor de fundo e pedimos que cada layer se desenhe no canvas.
Um grande problema encontrado nos editores(principalmente nos vetoriais, já que um layer é pintado em cima do outro), é a cintilização.
Duas regras para evitar isso seriam:
- Não pinte um pixel que não precise ser pintado.
- Não pinte um pixel que será coberto.
No programa de teste que citei, eu consegui resolver este problema mas fica lento. O fato é que a combinação GDI+VCL não é legal nestes casos.
Também há alguns problemas na pintura, não importa já que no meu editor faço diferente.
Clique para selecionar(Shift+Clique adiciona seleção) e mova com as teclas de direção. Para adicionar um layer, selecione uma imagem na caixa de combo e clique.
[url]http://www10.brinkster.com/ataliba/files.asp?id=1[/url]
GOSTEI 0
Ray
30/11/2003
Tenho quase um ano de Delphi, sei poco sobre seus ´segredos´ ainda... n sei mto mas me viro na lógica. Fiz uma rotina pra diminuir uma imagem perdendo o mínimo de resolução (diminuindo o efeito daqueles pontos ´gritantes´ no meio da figura), eu só tentei diminuir até 16x o tamanho original e deu certo.
SE ALGUEM TIVÉ QUERENDO TROCAR INFORMAÇÕES, ESTAMOS AÍ
SE ALGUEM TIVÉ QUERENDO TROCAR INFORMAÇÕES, ESTAMOS AÍ
GOSTEI 0
Jaguarnet7
30/11/2003
...No programa de teste que citei, eu consegui resolver este problema mas fica lento. O fato é que a combinação GDI+VCL não é legal nestes casos.
Também há alguns problemas na pintura, não importa já que no meu editor faço diferente.
Clique para selecionar(Shift+Clique adiciona seleção) e mova com as teclas de direção. Para adicionar um layer, selecione uma imagem na caixa de combo e clique.
[url]http://www10.brinkster.com/ataliba/files.asp?id=1[/url]
não to conseguindo entrar no endereço.
GOSTEI 0
Jaguarnet7
30/11/2003
Tenho quase um ano de Delphi, sei poco sobre seus ´segredos´ ainda... n sei mto mas me viro na lógica. Fiz uma rotina pra diminuir uma imagem perdendo o mínimo de resolução (diminuindo o efeito daqueles pontos ´gritantes´ no meio da figura), eu só tentei diminuir até 16x o tamanho original e deu certo.
SE ALGUEM TIVÉ QUERENDO TROCAR INFORMAÇÕES, ESTAMOS AÍ
se puder envia pra mim
GOSTEI 0
Ray
30/11/2003
se puder envia pra mim
Acho melhor n confiar mto no meu código (tenho 16 anos e programo a 2,sendo q 1 ano fiquei no pascal) , mas se quizé a lógica eu mando
GOSTEI 0
Beppe
30/11/2003
I´m sorry! :oops:
Parece que postei um linque quebrado. Mas já arrumei :)
Quem ainda tiver interessado, pega aqui: [url]http://www10.brinkster.com/ataliba/files.asp?id=1[/url]
Parece que postei um linque quebrado. Mas já arrumei :)
Quem ainda tiver interessado, pega aqui: [url]http://www10.brinkster.com/ataliba/files.asp?id=1[/url]
GOSTEI 0
Nigro
30/11/2003
Onde consigo o código (pois nunnca trabalhei com imagens no Delphi) para desenvolver uma ferramenta que pintasse dentro de um políogo como aquela ferramenta do Paint...
Beppe, pode ser decadente, mas foi isso que o cliente pediu... hehehe...
Beppe, pode ser decadente, mas foi isso que o cliente pediu... hehehe...
GOSTEI 0
Gandalf.nho
30/11/2003
Olhe na pasta Delphi\Demos\Doc\Graphex.
GOSTEI 0
Beppe
30/11/2003
Onde consigo o código (pois nunnca trabalhei com imagens no Delphi) para desenvolver uma ferramenta que pintasse dentro de um políogo como aquela ferramenta do Paint...
Beppe, pode ser decadente, mas foi isso que o cliente pediu... hehehe...
Esta se referindo a ferramenta Balde de tinta? Este efeito é alcançado com:
// pinta o form de vermelho no mousedown Canvas.Brush.Color := clRed; Canvas.FloodFill(X, Y, clBtnFace, fsBorder); // tente com Canvas.Pixels[X, Y]
GOSTEI 0
Nigro
30/11/2003
Isso mesmo Beppe...
Caramba... Seria só isso mesmo, mas na verdade o que eu queria é pintar um poligono irregular, por exemplo, já fiz as ferramentas para o usuário desenhar, agora ele precisaria pintar, esse polígono, o código é o mesmo?
Muuuuuuuito obrigado
Caramba... Seria só isso mesmo, mas na verdade o que eu queria é pintar um poligono irregular, por exemplo, já fiz as ferramentas para o usuário desenhar, agora ele precisaria pintar, esse polígono, o código é o mesmo?
Muuuuuuuito obrigado
GOSTEI 0
Nigro
30/11/2003
Agradecendo a ajuda do Beppe e gandalf.nho, estou editando o projeto Grahpex, mas a pintura do poligono irregular não funciona, se alguém tiver um tempo para ver isso, eu agradeço
GOSTEI 0
Beppe
30/11/2003
Pinte o polígono com Canvas.Polygon ou Canvas.Polyline ou Canvas.PolyPolygon(naum lembro bem os nomes). Selecione o Brush.Style do Canvas, para que haja um preenchimento. Tem a API SetFillMode ou SetPolyFillMode para ALTERNATE se quiser que os vértices alterem a direção de pintura, ou WINDING, para preencher tudo(se eu compliquei, testa e vê como fica).
GOSTEI 0