Ir para conteúdo
Fórum Script Brasil
  • 0

Pessoal Como Faço Para Por Uma Marca D'agua?


Guest Rodolfo Neto

Pergunta

Guest Rodolfo Neto

pessoal,

estou com uma duvida, eu estou capturando imagem de uma webcam e salvando em bmp, agora eu quero por uma marca d'agua nesta imagem.

como faço quem tiver algum ideia de unir imagem e uma delas ficar com uma certa transparencia(essa é minha duvida).

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
pessoal,

estou com uma duvida, eu estou capturando imagem de uma webcam e salvando em bmp, agora eu quero por uma marca d'agua nesta imagem.

como faço quem tiver algum ideia de unir imagem e uma delas ficar com uma certa transparencia(essa é minha duvida).

Veja se este código abaixo lhe serve. Não é grande não, só parece assim porque está comentado linha-a-linha ;).

Meu código parte da idéia de que você utiliza uma marca em escala de cinza, onde os valores de cada componente (Red, Green e Blue) representam o percentual redutor

procedure PutWaterMark(Src, Dst :TGraphic; OffsetX, OffsetY :Integer);
type
  PRGB = ^TRGB;
  TRGB = record
    Blue,
    Green,
    Red :byte;
  end;
var
  BmpDst,
  BmpMark :TBitmap;
  X, Y :Integer;
  pxRGBSrc,
  pxRGBDst :PRGB;
begin
  BmpDst := TBitmap.Create;
  BmpMark := TBitmap.Create;
  try
   // transformamos imagem de origem em Bitmap
    BmpDst.Assign(Dst);
    BmpMark.Assign(Src);
   // varreremos todas as linhas da imagem marca d'água
    for y := 0 to BmpMark.Height - 1 do
    begin
     // inicializamos nosso apontador para o início da Scanline
     // referente a linha da imagem destino a ser alterada
      pxRGBDst := BmpDst.Scanline[OffsetY +y];
     // movemos o ponteiro para a posição X inicial, aonde será
     // aplicada a marka d'água
      Inc(pxRGBDst, OffsetX);
     // inicializamos nosso apontador para o início da Scanline
     // referente a linha da imagem origem - marca d'água
      pxRGBSrc := BmpMark.Scanline[y];
     // varreremos todas as colunas na linha atual da marca d'água
      for x := 0 to (BmpMark.Width - 1) do
      begin
       // calculamos a cor do novo pixel na imagem destino
       // baseado no percentual de cada componente de cor existente
       // na imagem da marca d'água - o efeito melhor é obtido utilizando
       // escala de cinza
        pxRGBDst.blue := Trunc(pxRGBDst.blue *(pxRGBSrc.blue /255));
        pxRGBDst.red := Trunc(pxRGBDst.red *(pxRGBSrc.red /255));
        pxRGBDst.green := Trunc(pxRGBDst.green *(pxRGBSrc.green /255));
       // posicionamos nos respectivos pontos a serem processados
        inc(pxRGBDst);
        inc(pxRGBSrc);
      end;
    end;
   // atualizamos imagem destino
    Dst.Assign(BmpDst);
  finally
    BmpDst.Free;
    BmpMark.Free;
  end;
end;
uma outra opção é modificar a parte que faz o cálculo da nova cor do ponto por:
Inc(pxRGBDst.blue, Trunc(pxRGBDst.blue *(1-pxRGBSrc.blue /255)));
        Inc(pxRGBDst.red, Trunc(pxRGBDst.red *(1-pxRGBSrc.red /255)));
        Inc(pxRGBDst.green, Trunc(pxRGBDst.green *(1-pxRGBSrc.green /255)));
utilizando...
procedure TForm1.Button1Click(Sender: TObject);
var
  BmpMark :TBitmap;
  FileStream :TFileStream;
begin
 // inicializando bitmap a ser utilizado como marca d'água
  BmpMark := TBitmap.Create;
 // associamos o arquivo de imagem ao stream
  FileStream := TFileStream.Create('marca.bmp', 0);
  try
   // carregamos a imagem para o componente bitmap
    BmpMark.LoadFromStream(FileStream);
   // aplicamos à Image1 a marca d'água na posição desejada - 100,100
   // como a imagem destino esperada pela função é do tipo TGraphic,
   // em "teoria" é possível passar qualquer imagem carregada que seja
   // descendente desta classe (TBitmap, TMetafile, TJPEGImage, ...)
    PutWaterMark(BmpMark, Image1.Picture.Graphic, 100, 100);
  finally
    FileStream.Free;
    BmpMark.Free;
  end;
end;

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...