Hızlı resim görüntüleme sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
selocanbaba
Üye
Mesajlar: 14
Kayıt: 13 Haz 2018 03:10

Hızlı resim görüntüleme sorunu

Mesaj gönderen selocanbaba »

Merhaba Arkadaşlar,

bir projemizde desteğe ihtiyacımız var,

sorunumuz form üzerindeki ağdan çekilen bir resmin görüntülenme hızının yavaş olması, çekilen resmin boyutu 600K civarında, fakat 4 adet resim söz konusu, 4 resmi ortalama 2-3 saniye gibi bir sürede çekebiliyoruz,

normal web tabanlı bir programda anlık geliyor görüntüler fakat bizde 2-3 saniye gibi bir gecikme yaşıyoruz,

(Not: ağda paylaşılmış bir klasör var o yolu göstererek image componenti içine çağırıyoruz, fakat resimler dik konumda olduğu için birde 90 derece çevirme işlemi yapıyoruz,
database kaydetip ayrıca http ilede çekmeye denedik ama yine aynı sonuçlar elde edildi.
)

konu hakkında yardımlarınızı bekliyoruz.
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Hızlı resim görüntüleme sorunu

Mesaj gönderen ertank »

Merhaba,

Kullandığınız Delphi sürümünü bildirmemişsiniz.
Sorunuzda hiç kod örneği yok.
Bahsedilen resim formatı bilinmiyor.

Bu durumda yapabileceğim tek öneri bir "profiler" kullanarak kodunuzun hangi kısmının en yavaş çalıştığını tespit etmeniz ve bu noktadan ilerleyerek ikinci, üçüncü yavaş çalışan kod bölümlerini inceleyerek sorunu tespit etmeye çalışmanız yönünde olacaktır.

Hatırlatmakta fayda görüyorum. PNG dosya formatı aslında sıkıştırılmış BMP formatı gibidir. Önce sıkıştırılmış dosya genişletilir, ardından görüntü gösterilebilir. Bu bilgiye istinaden farklı resim dosyası formatları ile deneme yapmanızda sorun tespitine yardımcı olması açısından fayda olabilir.

En bilindik profiler uygulamalarından bir tanesi "AQTime" dır. Ücretsiz olarak deneme sürümü indirip sorununuzu çözmek için kullanabilirsiniz.
https://smartbear.com/product/aqtime-pro/overview/
selocanbaba
Üye
Mesajlar: 14
Kayıt: 13 Haz 2018 03:10

Re: Hızlı resim görüntüleme sorunu

Mesaj gönderen selocanbaba »

Kullandığım Delphi 10.2 Berlin sürümüdür,
kompoenet olarak ImageEn kullanıyorum, ve çektiğim resim formatıda JPEG dir,
tüm resimler server üzerinde kayıtlı,

denediğimiz yöntemlerde aşağıdaki gibi;
1) verileri Veritabanına kaydettik resimleri client lar direk ordan ulaşabiliyor, fakat her dosya 6-7mb boyutunda ayrıca günlük en az 1000 kayıt sözkonusu onun için veritabanı şişti, ayrıca dosya boyutu büyük olmasından dolayı VT'den çekerken en az (client tarafında) 5-6 saniye gecikme yaşadık,
vazgeçtik :),

2) wamp server kullandık, "htpp://ip-adres/image.jpg" şeklinde VT lerde yol kaydettik, böylelike VT şişmeden görüntüleri çekebildik, gecikmelerde 3 saniyelere düştü, fakat ağ kasmalarında 5-6 saniyeler çıktı,
vazgeçtik :),

3) klasör paylaşımı kullandık, server'da klasörü paylaşıma açtık, VT yol kaydettik, böylelikle yine VT de yer kaplamamış oldu, hızda güzeldi, 2 saniyelere düştü, fakat yinede bir web uygulamasındaki hıza ulaşamadık,
vazgeçtik :),

yani özetle bizim ihtiyacımız, aynı PHP sitelerde olduğu gibi clientlar serverdaki anlık ulaştığı resim hızına (nerdeyse 1 sn den az) ulaşabilmek istiyoruz,

umarım derdimizi anlatabilmişizdir,

Bu arada kullandığımız yöntemlere ihtityacı olan arkadaşlar varsa yardımcı olabiliriz.
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Hızlı resim görüntüleme sorunu

Mesaj gönderen ertank »

İlk verdiğiniz bilgiler ile ikinci bilgiler bir noktada uyumlu değil. İlk mesajınızda 600 KB civarında dosya boyutu olduğunu yazmıştınız. Şimdi ise 6-7 MB boyutuna geldiniz.

Web uygulamaları resim gösterebilmek için dosyayı upload etmenizi isterler. Resim zaten kodun çalıştığı bilgisayara kopyalanır. Bu durumda aradaki dosya kopyalama işlemi web uygulamalarında genellikle olmaz. Dolayısıyla kıyaslama yaptığınız uygulama sizin uygulamanız ile birebir aynı işlemi yapıp daha hızlı yapıyor olduğunu düşünmüyorum.

1 saniye altında hızlarda dosya transferi, resim döndürme ve ekranda gösterme işlemleri için iki öneri sunabilirim:
1- Sunucu ve istemcilerde 10Gbit ethernet ve SSD disk ile işlemi hızlandırmak mümkün olabilir.
2- Eğer resim %100 boyutlarda gösterilmiyor ise sunucu üzerinde bir uygulama yardımı ile dosya geldiği anda boyutlarını önizleme boyutlarına getirerek ve döndürme işlmleri tamamlanır. İstemci uygulama bu hazır dosyayı hızlı bir şekilde alıp ekranda gösterir. Aynı zamanda istemci uygulama bir thread aracılığı ile orjinal dosyayı arka planda kopyalayıp döndürme işlemlerini yapar ve kullanıma hazır hale getirir.

Bu öneri sadece bahsedilen resim %100 boyutlarda ekranda gösterilmeyecek ise işe yarayabilir.
selocanbaba
Üye
Mesajlar: 14
Kayıt: 13 Haz 2018 03:10

Re: Hızlı resim görüntüleme sorunu

Mesaj gönderen selocanbaba »

konuyu şöyle açıklayayım ,

ön izleme ekranında 600k lık resimler var (4 adet ayrı image) var ne kullanıcıya gerçek boyutlarıyla gösteriliyor, ama resimlerin orjinal 4k çözünürlüklü dosyaları var oda 6-7 mb civarında tabi bu dosyayı eğer kullanıcı önizleme resmi yeterli gelmezse çift tıklayıp büyütmek istediğinde kullanıcıya sunuluyor,
ama bizim hiz olarak zaten ihtiyacımız olan önzileme ekranına gelen resimlerin hızlı gelmesi ve kayıtlar arasında tıklayarak seri bir şekilde kayıtları (önizleme ekranında 4 ayrı görünen image için bahsediyorum) gösterebilmesi, önceki mesajı farklı bir başlıkta yazmıştım, admin'de yeni bir başlık açmamı isteyince konular açıklamalarım biraz kopuk oldu. kusura bakmayın.
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 181
Kayıt: 01 Oca 2008 05:34

Re: Hızlı resim görüntüleme sorunu

Mesaj gönderen Commandx »

Ağ üzerinden birzamanlar UDP client/server socketler ile 100kb lik jpg resimleri broadcast yapiyordum, bu resimler tıpkı video izler gibi ağdaki tüm pc ler uzerinden görüntüleyebiliyordu. fakat arsivimin bulunduğu Harddisk çöktü arsivim gitti maalesef.
Arşiv olsaydı örneği yayinlardim bayağı ugrastirmisti.
Udp socket kullan derim, UDP, tcp ve http den çok çok daha hızlıdır, resim datalarinin ulaşıp ulaşamadığıyla ilgilenmez, tcp socketler ise adrese teslim edildi diye geri bildirimi vardır bu yüzden UDP hiz bakımından avantajlı ama güvenlik açısından dezavantajlıdir veri kaybı yaşanabilir.
Eğer resimler önemsiz ise kullan, önemli ise tcp socket kullan derim.
Başka yolu yok.
Arkadaş yukarıda yazmış zaten SSD HD ve bilmem kaç gigabit ethernet ile o dediğin hizi UDP socketler ile yakalayabilirsin.
Uyarı : UDP SOCKETLER resmi 1024 bit paketler halinde(1kb) bölüp alıcı tarafında birleştirilerek işler.
Bunu önce jpg nin boyutunu 1024 e bölerek elde edilen sayı kadar broadcast edilir, bu edilmeden oncede dosya boyutu ağ üzerinden ilk postada alicilara iletilmiş olmalidir.
Agdaki pcnin biri 1 byte bile eksik veri alirsa resim ya goruntulenmez yada resmin bazı yerleri marstan gonderilen yarim yamalak nasa resimleri gibi olur.
Tcp de gönderilen datalar ise Streaming dir, tipki memory stream gibi.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Cevapla