e possivel fazer um editor de imagem no delphi?

Delphi

30/11/2003

eu gostaria de saber se e possivel fazer um editor de imagens no delphi parecido com o paint.

obrigado


Fzamara

Fzamara

Curtidas 0

Respostas

Basilio.sp

Basilio.sp

30/11/2003

Caro(a) fzamara,

Sim. No próprio Delphi já vem um exemplo.

Dê uma olhada na pasta de exemplos.


GOSTEI 0
Jaguarnet7

Jaguarnet7

30/11/2003

To fazendo um como projeto final. Se tiver alguma duvida poste aqui.


GOSTEI 0
Douglas Bitencourt

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.


GOSTEI 0
Jaguarnet7

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.


GOSTEI 0
Douglas Bitencourt

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.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

30/11/2003

Faça assim:

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

Douglas Bitencourt

30/11/2003

Obrigado Marcelo, irei testar e assim que o fizer retorno a ligação.. :)

[]s

Douglas.


GOSTEI 0
Beppe

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

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

Beppe

30/11/2003

Ué, manda! 8)


GOSTEI 0
Adriano Santos

Adriano Santos

30/11/2003

gostei da idéia.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

30/11/2003

ó o Ataliba, cara, a quanto tempo você ja lida com o Delphi?


GOSTEI 0
Douglas Bitencourt

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.


GOSTEI 0
Beppe

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.


GOSTEI 0
Douglas Bitencourt

Douglas Bitencourt

30/11/2003

Está Feito!

Espero ansioso por estas notícias...

Saudações e Boa Sorte ae.

Douglas.


GOSTEI 0
Cebikyn

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]


GOSTEI 0
Pocket

Pocket

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

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

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

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

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Í


GOSTEI 0
Jaguarnet7

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

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

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

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]


GOSTEI 0
Nigro

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...


GOSTEI 0
Gandalf.nho

Gandalf.nho

30/11/2003

Olhe na pasta Delphi\Demos\Doc\Graphex.


GOSTEI 0
Beppe

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

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


GOSTEI 0
Nigro

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

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
POSTAR