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

Sobrepor E Mover Imagem


bastard2003

Pergunta

Salve galera, alguém ai sabe como eu posso fazer isso!?!? tipo tenho que criar uma função pra sobrepor uma imagem a outra.. pra fazer tipo marca d'água, so que eu tava pensado em fazer assim, um image pra mim selecionar a posição do logo e ele colocaria essa imagem sobre as outras imagens de uma pasta, na mesma posição q ta no image... so que eu não to conseguindo fazer ele "colar" esse logo sobre essas imagens... alguém ai tem alguma ideia pra me ajudar??! e sobre a questão de posicionamento? tem como arrastar com o mouse a imagem dentro de um Image?! valeu galera... vo ficar no aguardo!

Valeu galera!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Salve galera, alguém ai sabe como eu posso fazer isso!?!? tipo tenho que criar uma função pra sobrepor uma imagem a outra.. pra fazer tipo marca d'água, so que eu tava pensado em fazer assim, um image pra mim selecionar a posição do logo e ele colocaria essa imagem sobre as outras imagens de uma pasta, na mesma posição q ta no image... so que eu não to conseguindo fazer ele "colar" esse logo sobre essas imagens... alguém ai tem alguma ideia pra me ajudar??! e sobre a questão de posicionamento? tem como arrastar com o mouse a imagem dentro de um Image?! valeu galera... vo ficar no aguardo!

Valeu galera!

Sobre a questão da marca d'água, conheço uma solução em outra linguagem (o módulo PIL em Python) na qual seria possível criar um componente (COM) para ser utilizado via Delphi. Se você tiver interesse posso te passar exemplos.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
bastard2003 disse:
Salve galera, alguém ai sabe como eu posso fazer isso!?!? tipo tenho que criar uma função pra sobrepor uma imagem a outra.. pra fazer tipo marca d'água, so que eu tava pensado em fazer assim, um image pra mim selecionar a posição do logo e ele colocaria essa imagem sobre as outras imagens de uma pasta, na mesma posição q ta no image... so que eu não to conseguindo fazer ele "colar" esse logo sobre essas imagens... alguém ai tem alguma ideia pra me ajudar??! e sobre a questão de posicionamento? tem como arrastar com o mouse a imagem dentro de um Image?! valeu galera... vo ficar no aguardo!

Valeu galera!

 

bastard2003,

A sugestão que tenho é a seguinte:

você pode utilizar dois TImage (Image1 = marca d'água e Image2 = source); o Image2 você movimenta sobre o Image1(posicionamento da marca d'água). Daí é só aplicar o Image1 sobre o Image2 ajustando as coordenadas relativas.

Supondo que seu form chame-se Form1 e possua os Image1 e Image2, para movimentar um image faça o seguinte:

1) Adicione duas variáveis private ao form:

TForm1 = class(TForm)

...

private

MouseDown :Boolean;

MousePos :TPoint;

end;

2) Selecione o Image1(marca d'água) e crie os eventos OnMouseDown, OnMouseMove, OnMouseUp:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

MousePos.X := X;

MousePos.Y := Y;

MouseDown := True;

end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

if MouseDown then

begin

// reposiciona o Image1

Image1.Left := Image1.Left +(X -MousePos.X);

Image1.Top := Image1.Top +(Y -MousePos.Y);

end;

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

MouseDown := False;

end;

Para aplicar a marca d'água sobre a imagem desejada, eu utilizei um botão que ao ser pressionado aplica o Image1 sobre o Image2, conforme segue:

procedure TForm1.Button1Click(Sender: TObject);

procedure AplicaMarcaDagua(SrcImage, WaterMarkImage :TBitmap; Offset :TPoint);

var

X, Y :Integer;

begin

with WaterMarkImage do

for x := 0 to width-1 do

for y:= 0 to height-1 do

// Considero que o 1º pixel corresponde a cor de transparência.

// Isso possibilita que sejam utilizados tipos de imagens que não

// contenham informação de transparência

if Canvas.pixels[x, y] <> Canvas.pixels[0, 0] then // altera se não for a cor de transparência

SrcImage.Canvas.Pixels[Offset.X +x, Offset.Y +y] := Canvas.pixels[x, y];

end;

var

DestRect :TRect;

BitmapSrc,

BitmapWaterMark :TBitmap;

begin

// Para possibilitar o uso de outros tipos de imagem que não sejam .BMP é

// que ambas as imagens são convertidas para bitmap, já que só podemos desenhar

// do canvas de um TImage se existir for um Bitmap. Se for um .JPG ocorrerá um

// run-time error "Can only modify an image if it contains a bitmap"

BitmapWaterMark := TBitmap.Create; // Cria Bitmap para marca d'água

try

BitmapWaterMark.Assign(Image1.Picture.Graphic); // Obtém Bitmap para imagem de marca d'água

BitmapSrc := TBitmap.Create; // Cria Bitmap para imagem a aplicar marca d'água

try

BitmapSrc.Assign(Image2.Picture.Graphic); // Obtém Bitmap da imagem a aplicar a marca d'água

// Calcula posicionamento da marca d'água(Image1) sobre a imagem desejada(Image2)

DestRect.Left := Image1.Left -Image2.Left;

DestRect.Top := Image1.Top -Image2.Top;

DestRect.Right := DestRect.Left +Image1.Width;

DestRect.Bottom := DestRect.Top +Image1.Height;

// Aplica marca d'água utilizando o método definido por CopyMode(propriedade do TCanvas)

// with BitmapWaterMark do

// BitmapSrc.Canvas.CopyRect(DestRect, Canvas, Rect(0, 0, Width, Height));

// Aplica marca d'água com transparência

AplicaMarcaDagua(BitmapSrc, BitmapWaterMark, DestRect.TopLeft);

Image2.Picture.Graphic.Assign(BitmapSrc); // Retorna para o objeto gráfico o bitmap com a marca d'água aplicada

Image2.Picture.SaveToFile('c:\temp\imagem.jpg'); // Regrava a imagem - Guardei o nome o arquivo no hint

// Image2.Picture.SaveToFile(Image2.Hint); // Regrava a imagem - Guardei o nome o arquivo no hint

finally

BitmapSrc.Free;

end;

finally

BitmapWaterMark.Free;

end;

end;

Conforme você pode observar nos comentários do código, esta é a única forma de sobrepor images sem obter um run-time error (eu não adivinhei isso não, descobri depois de algumas buscas na net) wink.gif

Para minha utilização, desenvolvi uma versão de marca d'água que utiliza um efeito de translucidez.

espero ter colaborado em sua empreitada.

abraços

Micheus

Blumenau - SC

 

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...