Tuval harika! - sayfa 88

 
Vitaliy Kuznetsov #:

Ayrıca bir hata fark ettim

Bu resim bir hataya neden oldu. Kesinlikle bir PNG, ancak verilerde DPI yok

//Bazılarında PDI verisi de yoktur, ancak çalışırlar.

Daha önce de yazdığım gibi PNG dekompresyon algoritması benim tarafımdan geliştirilmedi , ben Zorro 7 yıl önce. Daha doğrusu, bir C++ kodundan port etmiş olmalı. Dahası, bu kod her zaman bir hata verdi ve ben bu hatayı basitçe görmezden gelerek atladım, ardından dekompresyon çalıştı. Bu yüzden bazı bağlantılar olabilir. PNG formatının ve versiyonlarının özelliklerini anlamadım. Belki de bu formatı veya jpg formatını daha ayrıntılı incelemeniz gerekir.

Özellikle bu png dosyası 24 bit yerine 8 bit renk maskesi ile saydamlığı olmayan karelerle çarpık.

 
Renat Akhtyamov becerileriyle.... göstergeleri değiştirmek ve ayarlamak için kendi panellerinizi yazabilirsiniz.

Bunun gibi.

Sanırım piyasada iyi karşılanacaktır.

Bu yüzden şeffaf arka plan üzerinde simgelerin ayrıştırılması ve ölçeklendirilmesi ile ilgili bir örnek yaptım.


 
Nikolai Semko #:

Daha önce de yazdığım gibi, PNG dekompresyon algoritması benim tarafımdan değil, 7 yıl önce Zorro tarafından geliştirildi . Daha doğrusu, bir C++ kodundan port etmiş olmalı. Dahası, bu kod her zaman bir hata verdi ve ben bu hatayı basitçe görmezden gelerek atladım, ardından açma işlemi çalıştı. Bu yüzden bazı bağlantılar olabilir. PNG formatının ve versiyonlarının özelliklerini anlamadım. Belki de bu formatı veya jpg formatını daha ayrıntılı olarak incelemeniz gerekir.

Özellikle bu png dosyası, 24 bit yerine 8 bit renk maskesi ile şeffaflık olmadan karelerle çarpıktır.

Nikolai Semko #:

Ben denedim. Sadece yeniden boyutlandırma durumunda kareler fark ettim. Bu yüzden yeniden boyutlandırma algoritmam muhtemelen mükemmel değil. Bu algoritmanın çok uzun zaman önce yarım gün içinde anında oluşturulduğunu zaten yazmıştım. Şimdi bu algoritmayı oldukça farklı yapardım. Ama ne yazık ki henüz zamanım yok.

Kendimi 3+ için bir kod yazmanın bir gün ve 5+ için bir ay olduğunu anlıyorum. Ve eğer proje büyükse, terimler daha da büyük aralıklarda olabilir.

Elimizdekiler için teşekkür ederim. Şimdilik bu kadarı yeterli.

 

Kanvas'ta ekranı merkezden dairesel bir gradyanla doldurmanın herhangi bir yolu var mı?

Burada dikey bir gradyan örneği vardı - https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

Tuvalin ekranı merkezden dairesel bir gradyanla doldurmanın bir yolu var mı?

Burada bir dikey eğim örneği vardı - https://www.mql5.com/ru/code/31689

Yapması kolay.
sadece bir formüle ihtiyacınız var:

R2 = X2+Y2

Sanırım işlevi bile verdim

 
Vitaliy Kuznetsov #:

Tuvalin ekranı merkezden dairesel bir gradyanla doldurmanın bir yolu var mı?

Burada bir dikey eğim örneği vardı - https://www.mql5.com/ru/code/31689

bu seçeneği kullanabilirsiniz:

void iCanvas::RadiusGrad(double x, double y, double r, uint clr_center, uint clr_end){
   int x_left = Floor(x-r);
   int x_right = Ceil(x+r);
   int y_top = Floor(y-r);
   int y_bottom = Ceil(y+r);
   double r2=r*r;
   if (x_left<0) x_left = 0;
   if (x_left>=m_width) return;
   if (x_right>m_width) x_right = m_width;
   if (x_right<0) return;
   
   if (y_top<0) y_top = 0;
   if (y_top>=m_height) return;
   if (y_bottom>m_height) y_bottom = m_height;
   if (y_bottom<0) return;
   
   argb c1,c2, c;
   c1.clr =clr_center;
   c2.clr =clr_end;
   
   for(int i_y=y_top;i_y<y_bottom;i_y++) {
      for(int i_x=x_left;i_x<x_right;i_x++) {
         int adr = i_y*m_width+i_x;
         double r1 = (i_x-x)*(i_x-x)+(i_y-y)*(i_y-y);
         if (r1<=r2) {
            double k = sqrt(r1)/r;
            for (int i=0;i<4;i++) c.c[i] = uchar(c1.c[i] + k*((int)c2.c[i]-c1.c[i]));
            MixColor(c.clr,m_pixels[adr]);
         }
      }
   }
}
gradyan alfa kanalı (şeffaflık) ile de gider
Dosyalar:
 
Nikolai Semko #:

bu seçeneği kullanabilirsiniz:

gradyan alfa kanalı (şeffaflık) ile de gider

Teşekkürler, bir deneyeceğim.

 

Nikolai, merhaba!

Grafiği görüntüleme dönemini seçmeyi kolaylaştırmak için kaydırıcılar oluşturmanızı istediğimde

Bunu kastetmiştim:


çok uygun!
 
Renat Akhtyamov #:

Nikolai, merhaba!

Grafiği görüntüleme dönemini seçmeyi kolaylaştırmak için kaydırıcılar oluşturmanızı istediğimde

Bunu kastetmiştim:


çok uygun!
İlk olarak, çok uygun değil (IMHO).
İkincisi, bu tür gerçekleştirmeler zaman alıcıdır
 
Nikolai Semko #:
İlk olarak, çok uygun değil (IMHO)
Mesele şu ki, böyle bir şeyi uygularken, kaçınılmaz olarak felaket bir kaydırıcı uzunluğu eksikliğiyle karşılaşacaksınız.
Kural olarak, bu, genişliği düğmeyi kenarlarından sürükleyerek değiştirilebilen ve böylece ölçeği değiştirebilen tek bir kaydırıcıda değil, tek bir kaydırıcıda uygulanır. Ancak bu yaklaşım, daha kullanışlı olmasına rağmen kaydırıcı uzunluğu sorununu çözmez.