Juntar Duas Imagens?
[b:0ce861ca0c]Galera meu problema é o seguinte
estou fazendo um programa para edição de fotus
Eu queria juntar duas imagens em uma só
Exemplo:
Na imagem 1 eu tenho a foto do cara e
Na imagem 2 eu tenho uma borda
Teria como eu juntar as duas imagens em uma só, formando assim a foto com a borda??[/b:0ce861ca0c]
estou fazendo um programa para edição de fotus
Eu queria juntar duas imagens em uma só
Exemplo:
Na imagem 1 eu tenho a foto do cara e
Na imagem 2 eu tenho uma borda
Teria como eu juntar as duas imagens em uma só, formando assim a foto com a borda??[/b:0ce861ca0c]
Mortify
Curtidas 0
Respostas
Fabianosales
02/12/2008
Teria como eu juntar as duas imagens em uma só, formando assim a foto com a borda??
Tem sim, mas o modo de implementar vai depender de alguns fatores.
1- Você tem alguma implementação de camadas (layers) no programa?
2- Há suporte para pixels transparentes em seu projeto (canal alpha)?
3- As duas imagens estão com o mesmo formato de pixel?[/list]
GOSTEI 0
Mortify
02/12/2008
[b:02faae78bc]Desculpa a demora
mais é que eu já havia até desistido do projeto
Se poder me ajudar..
1. Não. (Tenho apenas dois Componentes Image)
2. Sim. Estou usando um componete pra usar imagens em Png.
3. Sim. Em mesmo formato e mesmo tamanho.[/b:02faae78bc]
mais é que eu já havia até desistido do projeto
Se poder me ajudar..
1. Não. (Tenho apenas dois Componentes Image)
2. Sim. Estou usando um componete pra usar imagens em Png.
3. Sim. Em mesmo formato e mesmo tamanho.[/b:02faae78bc]
GOSTEI 0
Fabianosales
02/12/2008
Eu pus um exemplo pra download em [url]http://fabianosalles.eti.br/blog/delphi/files/test/AlphaBlendTeste01.rar[/url]
Aqui há uma implementação de transparência em bitmaps padrão (TBitmap) de 32 bits.
A idéia é simples.
Cada pixel da imagem será formado por 4 componentes:
A ordem dos campos RGBA está invertida de propósito, pois é dessa maneira que os bitmaps de 32bits são armazenados.
Agora, supondo que IMG1 seja a imagem de cima e BG1 seja a imagem de baixo, para mesclar as duas, basta percorrer os pixels da imagem IMG1 alterar BG1 assim:
Vale lembrar que esse método só funciona para imagens de 32bits. Se você quiser trabalhar com outros formatos, será presico adaptar o código.
Outra coisa é que no código do exemplo eu usei TBitmap.ScanLines em vez de Tbitmap.Canvas.Pixels para manipular os pixels da imagem porque trabalhar com ponteiros é mais rápido e mais flexível.
Qualquer dúvida, posta aí.
:wink:
Aqui há uma implementação de transparência em bitmaps padrão (TBitmap) de 32 bits.
A idéia é simples.
Cada pixel da imagem será formado por 4 componentes:
PRGB32 = ^TRGB32; TRGB32 = packed record B, G, R, A : byte; end;
A ordem dos campos RGBA está invertida de propósito, pois é dessa maneira que os bitmaps de 32bits são armazenados.
Agora, supondo que IMG1 seja a imagem de cima e BG1 seja a imagem de baixo, para mesclar as duas, basta percorrer os pixels da imagem IMG1 alterar BG1 assim:
BG1.B := BG1.B + (IMG1.B - BG1.B) * IMG1.A div 255; BG1.G := BG1.G + (IMG1.G - BG1.G) * IMG1.A div 255; BG1.R := BG1.R + (IMG1.R - BG1.R) * IMG2.A div 255;
Vale lembrar que esse método só funciona para imagens de 32bits. Se você quiser trabalhar com outros formatos, será presico adaptar o código.
Outra coisa é que no código do exemplo eu usei TBitmap.ScanLines em vez de Tbitmap.Canvas.Pixels para manipular os pixels da imagem porque trabalhar com ponteiros é mais rápido e mais flexível.
Qualquer dúvida, posta aí.
:wink:
GOSTEI 0
Mortify
02/12/2008
[b:f818b2bf0b]Cara n intendi nada.. hehe
da pra da uma mastigada pra mim ^^
Teu exemplo n abriu no meu delphi
Ta faltando algum componente =[[/b:f818b2bf0b]
da pra da uma mastigada pra mim ^^
Teu exemplo n abriu no meu delphi
Ta faltando algum componente =[[/b:f818b2bf0b]
GOSTEI 0