Array
(
)

Sobrepor E Mover Imagem, (marca d´água)!

Bastard2003
   - 08 nov 2005

Salve galera, alguem 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... alguem 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!


Marcio.theis
   - 09 nov 2005

E aew rapa.... blz... Onde vc pode pegar um exemplo para lhe servir de base é em: C:\Arquivos de programas\Borland\Delphi6\Demos\Doc\Graphex da sua máquina, o delphi 6 traz este exemplo, o que ele faz é colocar uma imagem sobre a outra usando a opção de copiar e colar do programinha, na opção de Colar vc podera ver que vc pode passar a posição desejada de onde quer que fique a marca, desta forma vc pode fazer uma função que pega o tamanho da imagem e calcula a melhor posição para colocar a figura... Qualquer coisa é só falar...


Bastard2003
   - 09 nov 2005

Valeu cara.. não tava conseguindo resolver esse problema.. mas tipo... ele so abre BMP ne?! se passar uma função tornando JPGE ou GIF ele deve funcionar ne?!!
outra coisa... eu to usando um ScrollBox pra poder mover o TImage dentro dele pra posicionar a imagem a onde eu quero que ela apareça na nova figura, colocando uma global eu posso passar esse valor pra função que tem naquele exemplo ne!?
Value mesmo cara...
abraços
Sucesso!

:D


Marcio.theis
   - 09 nov 2005

No caso naquele exemplo vc somente pode manipular imagens do tipo BMP, mas vc pode usar as lib do componente ´GifImage´ para manipular as imagens e colocar no formato que vc desejar. Em relação a segunda pergunta, vc pode sim criar um variável global para ser informao a posição que deseja que seja colocado a nova figura, bastando apenas depois alterar a posição que deve-se passar para que cole uma sobre a outra... Outra coisa que vc poderia fazer é criar tudo de forma dinâmica, pois vc pode usar isto para colocar em um monte de figuras, ou seja, vc tem uma pasta de fotos com um monte de foto, e no seu aplicativo vc apenas iria dizer a posição que quer que fique a nova figura por cima da outra, podendo assim somente mostrar para o usuário a figura que esta sendo alterado, não necessitando que ele faça uma de cada vez....


Bastard2003
   - 09 nov 2005

boa!! valeu a dica.. mas tipo... tava pensando no seguinte... criar dinamico é uma boa... torna mais leve... mas como eu vou fazer pra criar um componente dentro de outro?! é que tipo, vou criar um ScrollBox e dentro dele colocar o TImage pra ele ficar ali dentro, no caso esse ScrollBox vai ta com as duas barras, pro TImge poder ser AutoSize... outra coisa.. não querendo abusar ja... mas como eu faria pra poder mover a imagem qnd o mouse tiver precionado?!! tava pensando em algo do tipo: no on mouseDown o seto a posição da imagem (left/Top) sendo a posição do mouse (GetCursorPos) so que eu não me recordo qual o formato do resultado dessa função ali... não lembro se ele retorna um inteiro ou um ponteiro!
:D
Valeu a ajuda de novo!
Sucesso!


Marcio.theis
   - 09 nov 2005

Cria um projeto e adiciona apenas um botão no form, faça o seguinte:
#Código


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, JPeg, Menus;

type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure MouseParaBaixo(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure MouseMexer(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure MouseParaCima(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
MouseDownSpot: TPoint;
Capturing: bool;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
image: TImage;
scrool: TScrollBox;
begin
scrool:=TScrollBox.Create(Application);
scrool.Parent:=Self;
scrool.Name:=´scroll´;
scrool.DoubleBuffered:=True;
scrool.AutoSize:=True;

image:=TImage.Create(Application);
image.Parent:=scrool;
image.Name:=´image´;
image.AutoSize:=True;
image.Picture.LoadFromFile(´C:\imagem1.jpg´);

image:=TImage.Create(Application);
image.Parent:=scrool;
image.Name:=´image2´;
image.AutoSize:=True;
image.OnMouseUp:=MouseParaCima;
image.OnMouseDown:=MouseParaBaixo;
image.OnMouseMove:=MouseMexer;
image.Picture.LoadFromFile(´C:\imagem2.jpg´);
end;

procedure TForm1.MouseMexer(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if Capturing then
begin
(Sender as TImage).Left:=(Sender as TImage).Left -(MouseDownSpot.x-x);
(Sender as TImage).Top:=(Sender as TImage).Top - (MouseDownSpot.y-y);
end;
end;

procedure TForm1.MouseParaBaixo(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Capturing then
begin
ReleaseCapture;
Capturing:=false;
(Sender as TImage).Left:=(Sender as TImage).Left - (MouseDownSpot.x -x);
(Sender as TImage).Top:=(Sender as TImage).Top - (MouseDownSpot.y - y);
end;
end;

procedure TForm1.MouseParaCima(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then
begin
SetCaptureControl((Sender as TImage));
Capturing:=True;
MouseDownSpot.X:=x;
MouseDownSpot.Y:=Y;
end;
end;

end.


Neste caso ele ira fazer ´acredito´ o que vc deseja, para mover a imagem2, basta que vc segure o Ctrl e clique sobre a imagem e comece a mover....


Bastard2003
   - 09 nov 2005

Valeu cara... era exatamente isso que eu tava tentando fazer!! abraço!
Valeu mesmo!


Harrisson
   - 12 abr 2013

e pra salvar essa imagem com a "marca dagua" ? salvar como bmp ou jpg
como que faz?
quando coloco image.picture.salvetofile(caminho) ele salva a ultima imagem que coloquei (que no caso coloco 4 imagens sobre um fundo definido pelo usuario).

No image ele mostra normalmente as 4 sobre o fundo, mas eu preciso salva - la, em jgp ou em bmp. Alguem tem alguma idéia?


Obrigado!