Juntar Duas Imagens?

Delphi

02/12/2008

[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]


Mortify

Mortify

Curtidas 0

Respostas

Fabianosales

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

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]


GOSTEI 0
Fabianosales

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

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]


GOSTEI 0
POSTAR