Arquivo da tag: zoom

Dando Zoom em Imagem usando Delphi Mobile

A primeira coisa que devemos fazer é configurar o componente Gesture Manager para aceitar os gestos de zoom, rotação. Esse último servirá para que possamos girar a imagem. Em seguida insira um componente do tipo TImage no formulário. Marque sua propriedade Align com a opção Center. Por fim, clique duas vezes sobre a propriedade MultiResBitmap e escolha uma foto usando o botão Open à direita do campo referente ao caminho da imagem:

 

Vamos iniciar a codificação criando uma variável. Ela será responsável por guardar a última posição. Localize a cláusula var logo acima de Implementation e adicione as variáveis. Caso a cláusula var não exista, digite-a.

Var
Form1 : TForm1;
FLastDistance: Integer;

A variável guardará a última distância de zoom na imagem, assim o zoom será sempre incremental. Feito isso precisaremos codificar agora o evento OnGesture do formulário. Preencha como mostrado abaixo.

procedure TForm1.FormGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
LObj: IControl;
LImage: TImage;
LImageCenter: TPointF;
begin
if EventInfo.GestureID = igiZoom then
begin
LObj := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
if LObj is TImage then
begin
if (not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags)) and
(not(TInteractiveGestureFlag.gfEnd in EventInfo.Flags)) then
begin
{ zoom the image }
LImage := TImage(LObj.GetObject);
LImageCenter := LImage.Position.Point + PointF(LImage.Width / 2,
LImage.Height / 2);
LImage.Width := LImage.Width + (EventInfo.Distance FLastDistance);
LImage.Height := LImage.Height + (EventInfo.Distance FLastDistance);
LImage.Position.X := LImageCenter.X LImage.Width / 2;
LImage.Position.Y := LImageCenter.Y LImage.Height / 2;
end;
FLastDistance := EventInfo.Distance;
end;
end;
end;

Apesar de um código relativamente grande, ele é simples de ser entendido. A primeira linha abaixo do primeiro begin diz respeito a detecção do gesto praticado pelo usuário. Perceba:

if EventInfo.GestureID = igiZoom then

A constante EventInfo, presente nos parâmetros do evento, recebe o ID (Identificador) do gesto praticado através do método GestureID. Ele então é comparado a constante igiZoom. Se foram iguais então capturamos a foto dentro do TImage e alteramos algumas de suas propriedades para darmos o efeito de zoom. Perceba que alteramos seu posicionamento em Position, sua altura e largura em Height e Width, respectivamente, e por fim guardamos sua última distantância na variável FLastDistance.