Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 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
DelphiCan'dır!
Cevapla
#2
Ellerinize sağlık hocam Smile Vakitsizlikten paylaşamıyorum böyle şeyleri sayenizde herkes yararlanabiliyor.
Yeni Nesil Yazılımcı
Linkedin: https://tr.linkedin.com/in/barisatalay07
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ı: İ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  SmoothMobile Screen Recorder veya iDwikat Screen RECorder 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.
DelphiCan'dır!
Cevapla
#5
(11-01-2017, Saat: 08:36)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: 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  SmoothMobile Screen Recorder veya iDwikat Screen RECorder 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ı
WWW
Cevapla
#8
(01-11-2017, Saat: 20:39)Paranoyaq Adlı Kullanıcıdan Alıntı: 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ı

Merhaba,
EventInfo.Distance bilgisi veya belirleyeceğiniz ek katsayılarla zoom değerini arttırabilirsiniz.  
Bu bilgiyi harita işlemlerinde 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.
DelphiCan'dır!
Cevapla
#9
(10-01-2017, Saat: 20:55)barisatalay Adlı Kullanıcıdan Alıntı: Ellerinize 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
#10
Merhaba;

Bu konuda 10.2.3 versiyonun bir gelişme yok mu yoksa yine Fesih bey'in belirttiği şekilde mi yapılıyor hala. Kurup deneyen var mı acaba.

İyi çalışmalar.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Küçük Hızlandırma İşlemleri narkotik 15 14.116 26-09-2019, Saat: 09:47
Son Yorum: Bay_Y
  Object Model İle SQL İşlemleri Yaptırma witalihakko 5 7.146 02-03-2019, Saat: 12:39
Son Yorum: cexx
  Firemonkey Label'a Arkaplan Rengi Vermek Fesih ARSLAN 2 6.213 05-07-2018, Saat: 13:21
Son Yorum: Bay_Y
  SGK Evrak Doküman İşlemleri, Belge Gönderme csunguray 3 4.590 21-02-2018, Saat: 14:06
Son Yorum: csunguray
  Delphi Firemonkey Local İp Adresi Öğrenme esrehmaan 12 14.141 15-02-2018, Saat: 15:15
Son Yorum: elixir84



Konuyu Okuyanlar: 1 Ziyaretçi