Fórum Juntar Duas Imagens? #366658

02/12/2008

0

[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

Responder

Posts

11/12/2008

Fabianosales

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]


Responder

Gostei + 0

17/12/2008

Mortify

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


Responder

Gostei + 0

17/12/2008

Fabianosales

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:


Responder

Gostei + 0

26/12/2008

Mortify

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar