Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FireMonkey Resimlerde Pan ve Zoom İşlemleri
#1
Merhaba;
Bildiğiniz gibi Image nesnesinin doğal Pan ve Zoom özelliği henüz yok. (İlerleyen sürümlerde olur İnşallah) Her iki özelliği kullanabilmek için aşağıdaki işlem adımlarını takip ederek projenize entegre edebilirsiniz.

Image nesnesinin Pan ve Zoom işlemleri için;

1- Forma bir adet GestureManager ve bir Image nesnesi yerleştirin.
2- Image nesnesine herhangi bir resim ekleyin.
3- Object Inspector'dan Formun Touch>GestureManager özelliğinde GestureManager1'i seçin.
4- Object Inspector'dan Formun Touch>InteractiveGestures özelliğinin Zoom ve Pan özelliğini True yapın.
5- projenin private bölümünde aşağıdaki tanımlamaları yapın;

 private
   FEnSonKonum: TPointF;
   FEnSonMesafe: Integer;

6- Formun OnGesture olayında aşağıdaki kodları yazın.

var
 LObj: IControl;
 LImage: TImage;
 LImageMerkez: TPointF;
begin
 //Zoom için
 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
       LImage := TImage(LObj.GetObject);
       LImageMerkez := LImage.Position.Point + PointF(LImage.Width / 2,
         LImage.Height / 2);
       LImage.Width := LImage.Width + (EventInfo.Distance - FEnSonMesafe);
       LImage.Height := LImage.Height + (EventInfo.Distance - FEnSonMesafe);
       LImage.Position.X := LImageMerkez.X - LImage.Width / 2;
       LImage.Position.Y := LImageMerkez.Y - LImage.Height / 2;
     end;
     FEnSonMesafe := EventInfo.Distance;
   end;
 end;

 //Pan için
 if EventInfo.GestureID = igiPan then
 begin
   LObj := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
  if LObj is TImage then
   begin
     if not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags) then
     begin
       LImage := TImage(LObj.GetObject);
       LImage.Position.X := LImage.Position.X + (EventInfo.Location.X - FEnSonKonum.X);
       LImage.Position.Y := LImage.Position.Y + (EventInfo.Location.Y - FEnSonKonum.Y);
     end;
       FEnSonKonum  := EventInfo.Location;
   end;
 end;

end;

Sonuç;
avj1xk.jpg

İyi çalışmalar
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#2
Ellerinize sağlık hocam Smile Vakitsizlikten paylaşamıyorum böyle şeyleri sayenizde herkes yararlanabiliyor.
Yeni Nesil Yazılımcı
Linkedin: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Blog adresim: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#3
İyi akşamlar. Paylaşım için teşekkürler Fesih bey. Yakın zamanda kardeş forumda bu olayı sormuştular evap olarak sizin makelnizi yardımcı olması için yanıt verdim.

*Fesih bey aslında konu dışı. Merakımdan soruyorum şu video gibi animasyon yapmak için hangi yazılım kullanıyorsunuz?
WWW
Cevapla
#4
(10-01-2017, Saat: 23:22)AliZairov Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olİyi akşamlar. Paylaşım için teşekkürler Fesih bey. Yakın zamanda kardeş forumda bu olayı sormuştular evap olarak sizin makelnizi yardımcı olması için yanıt verdim.
*Fesih bey aslında konu dışı. Merakımdan soruyorum şu video gibi animasyon yapmak için hangi yazılım kullanıyorsunuz?

Rica ederim, faydalı olur İnşallah.
Hareketsiz görüntüler ve ekran alıntıları için Snagit kullanıyorum.
Hareketli görüntü (gif) oluşturmak için öncelikle telefondan ekran görüntüsünü video olarak kaydediyorum. Bunun için  Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol veya Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol kullanıyorum.
Daha sonra bu video dosyasını AVS Video Editor ile import ederek, istediğim kareleri kırpıyorum (Trim). 
Yine  AVS Video Editor ile Produce işlemine tabi tutarak; export türünü gif (File > Gif) seçiyorum. Görüntü boyunu düzenleyerek, export ediyorum.
Son olarak bir web sunucuya göndererek link paylaşıyorum.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
(11-01-2017, Saat: 08:36)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlRica ederim, faydalı olur İnşallah.
Hareketsiz görüntüler ve ekran alıntıları için Snagit kullanıyorum.
Hareketli görüntü (gif) oluşturmak için öncelikle telefondan ekran görüntüsünü video olarak kaydediyorum. Bunun için  Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol veya Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol kullanıyorum.
Daha sonra bu video dosyasını AVS Video Editor ile import ederek, istediğim kareleri kırpıyorum (Trim). 
Yine  AVS Video Editor ile Produce işlemine tabi tutarak; export türünü gif (File > Gif) seçiyorum. Görüntü boyunu düzenleyerek, export ediyorum.
Son olarak bir web sunucuya göndererek link paylaşıyorum.

İyi akşamlar. Teşekkürler Fesih bey.
WWW
Cevapla
#6
Yararlı bir paylaşım olmuş. Teşekkürler
Fesih hocam paylaştığınız Image nesnesinin ZOOM olayını bir butona atayabilirmiyiz? yada Formun.Show olayına v.b
Ayrıca bunu Android'te yapabilen bildiğiniz bir component varmı?
Cevapla
#7
zoom yaparken zoom işlemini çok az çok az yapıyor galeride sabit image zoom'u biraz daha büyük bir alanı zoomluyor gibime geldi burda bunu biraz daha büyütme imkanımız var mı
Cevapla
#8
(01-11-2017, Saat: 20:39)Paranoyaq Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olzoom yaparken zoom işlemini çok az çok az yapıyor galeride sabit image zoom'u biraz daha büyük bir alanı zoomluyor gibime geldi burda bunu biraz daha büyütme imkanımız var mı

Merhaba,
EventInfo.Distance bilgisi veya belirleyeceğiniz ek katsayılarla zoom değerini arttırabilirsiniz.  
Bu bilgiyi Linkleri Görebilmeniz İçin Giriş yap veya Üye Olnde kullanmak için sormuşsunuz galiba. 
Bu noktada ek bir tavsiyem olacak; harita işlemleri için coğrafik koordinat sistemine uygun (ölçekli) krokilerin olması ve her zoom seviyesine (harita katmanı) göre de farklı krokilerin yüklenmesi şarttır.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#9
(10-01-2017, Saat: 20:55)barisatalay Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEllerinize sağlık hocam Smile Vakitsizlikten paylaşamıyorum böyle şeyleri sayenizde herkes yararlanabiliyor.

Senin katkıların çok önemli, ben şahsen senden müthiş makaleler bekliyorum. İlerleyen zamanlarda daha da yoğun olacaksın, söylemedi deme  Smile
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi Firemonkey Local İp Adresi Öğrenme esrehmaan 12 1.291 15-02-2018, Saat: 15:15
Son Yorum: elixir84
  Delphi Firemonkey Android İzin Kontrolü esrehmaan 2 638 23-12-2016, Saat: 22:22
Son Yorum: esrehmaan
  Firemonkey Label'a Arkaplan Rengi Vermek Fesih ARSLAN 1 1.491 15-08-2016, Saat: 23:50
Son Yorum: 10.Köy
  Firemonkey (FMX) Nesne Boyutunu (Yükseklik, Genişlik) Yeniden Düzenlemek Fesih ARSLAN 0 962 24-07-2016, Saat: 17:16
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi