La toile est cool ! - page 88

 
Vitaliy Kuznetsov #:

J'ai également constaté une erreur

Cette image a provoqué une erreur. Il s'agit bien d'un PNG, mais il n'y a pas de DPI dans les données.

//Certaines d'entre elles n'ont pas non plus de données PDI, mais elles fonctionnent.

Comme je l'ai déjà écrit, l'algorithme de décompression PNG n'a pas été développé par moi, je suis Zorro, il y a 7 ans. Pour être plus précis, il a dû le porter à partir d'un code C++. De plus, ce code donnait toujours une erreur, et je contournais simplement cette erreur en l'ignorant, après quoi la décompression fonctionnait. C'est la raison pour laquelle il peut y avoir des joints. Je n'ai pas compris la spécification du format PNG et de ses versions. Peut-être devriez-vous vous pencher plus en détail sur ce format ou sur le format jpg.

En particulier, ce fichier PNG est tordu avec des carrés sans transparence avec un masque de couleur de 8 bits au lieu de 24 bits.

 
Renat Akhtyamov réglage des indicateurs.....

comme ceci

Je suppose qu'il sera bien accueilli sur le marché.

C'est pourquoi j'ai créé un exemple avec l'analyse et la mise à l'échelle d'icônes sur fond transparent.


 
Nikolai Semko #:

Comme je l'ai déjà écrit, l'algorithme de décompression PNG n'a pas été développé par moi, mais par Zorro il y a 7 ans. Pour être plus précis, il a dû le porter à partir d'un code C++. De plus, ce code donnait toujours une erreur, et je contournais simplement cette erreur en l'ignorant, après quoi la décompression fonctionnait. C'est la raison pour laquelle il peut y avoir des joints. Je n'ai pas compris la spécification du format PNG et de ses versions. Peut-être devriez-vous vous plonger dans ce format ou dans le format jpg plus en détail.

En particulier, ce fichier PNG est tordu avec des carrés sans transparence avec un masque de couleur de 8 bits au lieu de 24 bits.

Nikolai Semko #:

J'ai essayé. Je n'ai remarqué des carrés qu'en cas de redimensionnement. C'est pourquoi mon algorithme de redimensionnement n'est probablement pas parfait. J'ai déjà écrit une fois que cet algorithme a été créé à la volée, littéralement en une demi-journée, il y a bien longtemps. Aujourd'hui, je ferais cet algorithme différemment. Mais, malheureusement, je n'ai pas encore le temps.

Je comprends moi-même que l'écriture d'un code pour 3+ est une journée et pour 5+ c'est un mois. Et si le projet est important, les délais peuvent être encore plus longs.

Sur ce que nous avons, je vous remercie. C'est suffisant pour l'instant.

 

Existe-t-il un moyen dans Kanvas de remplir l'écran avec un dégradé circulaire à partir du centre ?

Il y avait un exemple de dégradé vertical ici - https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

Est-il possible de remplir l'écran avec un dégradé circulaire à partir du centre ?

Il y avait un exemple de dégradé vertical ici - https://www.mql5.com/ru/code/31689

C'est facile à faire.
vous n'avez besoin que d'une formule :

R2 = X2+Y2

Je crois que j'ai même donné la fonction

 
Vitaliy Kuznetsov #:

Est-il possible de remplir l'écran avec un dégradé circulaire à partir du centre ?

Il y avait un exemple de dégradé vertical ici - https://www.mql5.com/ru/code/31689

vous pouvez utiliser cette option :

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]);
         }
      }
   }
}
le dégradé passe aussi par le canal alpha (transparence)
Dossiers :
 
Nikolai Semko #:

vous pouvez utiliser cette option :

le dégradé passe aussi par le canal alpha (transparence)

Merci, je vais essayer.

 

Nikolaï, bonjour !

Je vous ai demandé de créer des curseurs pour faciliter le choix de la période de visualisation du graphique.

Je voulais dire ceci :


très pratique !
 
Renat Akhtyamov #:

Nikolaï, bonjour !

Je vous ai demandé de créer des curseurs pour faciliter le choix de la période de visualisation du graphique.

Je voulais dire ceci :


très pratique !
Premièrement, ce n'est pas très pratique (IMHO).
Deuxièmement, de telles prises de conscience prennent du temps
 
Nikolai Semko #:
Tout d'abord, ce n'est pas très pratique (IMHO)
Le fait est que lorsque vous mettez en œuvre quelque chose comme cela, vous serez inévitablement confronté à un manque catastrophique de longueur du curseur.
En règle générale, on utilise un seul curseur, et non un seul, dont la largeur peut être modifiée en faisant glisser le bouton par ses bords, ce qui change l'échelle. Mais cette approche ne résout pas le problème de la longueur du curseur, bien qu'elle soit plus pratique.