Leinwand ist cool! - Seite 88

 
Vitaliy Kuznetsov #:

Außerdem ist mir ein Fehler aufgefallen

Dieses Bild hat einen Fehler verursacht. Es ist definitiv ein PNG, aber es hat keine DPI in den Daten

//Einige dieser Bilder haben auch keine PDI-Daten, aber sie funktionieren.

Wie ich bereits geschrieben habe, wurde der PNG-Dekomprimierungsalgorithmus nicht von mir, sondern von Zorro vor 7 Jahren entwickelt . Um genauer zu sein, muss er ihn aus einem C++-Code portiert haben. Außerdem gab dieser Code immer einen Fehler aus, und ich habe diesen Fehler umgangen, indem ich ihn einfach ignoriert habe, woraufhin die Dekompression funktionierte. Deshalb gibt es vielleicht ein paar Fugen. Ich habe die Spezifikation des PNG-Formats und seiner Versionen nicht verstanden. Vielleicht müssen Sie sich mit diesem Format oder dem jpg-Format näher befassen.

Besonders diese png-Datei ist schief mit Quadraten ohne Transparenz mit 8-Bit-Farbmaske anstelle von 24-Bit.

 
Renat Akhtyamov Einstellen von Indikatoren schreiben....

wie diese

Ich nehme an, das wird auf dem Markt gut ankommen.

Deshalb habe ich ein Beispiel mit Parsing und Skalierung von Icons auf transparentem Hintergrund erstellt.


 
Nikolai Semko #:

Wie ich bereits geschrieben habe, wurde der PNG-Dekomprimierungsalgorithmus nicht von mir, sondern von Zorro vor 7 Jahren entwickelt . Um genauer zu sein, muss er ihn aus einem C++-Code portiert haben. Außerdem gab dieser Code immer einen Fehler aus, und ich habe diesen Fehler umgangen, indem ich ihn einfach ignoriert habe, woraufhin die Dekompression funktionierte. Deshalb gibt es vielleicht ein paar Fugen. Ich habe die Spezifikation des PNG-Formats und seiner Versionen nicht verstanden. Vielleicht sollten Sie sich eingehender mit diesem Format oder dem jpg-Format beschäftigen.

Besonders diese png-Datei ist schief mit Quadraten ohne Transparenz mit 8-Bit-Farbmaske anstelle von 24-Bit.

Nikolai Semko #:

Ich habe es ausprobiert. Ich habe die Quadrate nur bei der Größenänderung bemerkt. Deshalb ist mein Größenänderungsalgorithmus wahrscheinlich nicht perfekt. Ich habe schon einmal geschrieben, dass dieser Algorithmus buchstäblich "on the fly" in einem halben Tag vor ziemlich langer Zeit erstellt wurde. Jetzt würde ich diesen Algorithmus ganz anders machen. Aber leider habe ich noch keine Zeit.

Ich weiß selbst, dass das Schreiben eines Codes für 3+ einen Tag und für 5+ einen Monat dauert. Und wenn das Projekt groß ist, können die Fristen noch größer sein.

Für das, was wir haben, danke ich Ihnen. Das ist genug für jetzt.

 

Gibt es in Kanvas eine Möglichkeit, den Bildschirm mit einem kreisförmigen Farbverlauf von der Mitte aus zu füllen?

Hier gab es ein Beispiel für einen vertikalen Farbverlauf - https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

Gibt es in Canvas eine Möglichkeit, den Bildschirm mit einem kreisförmigen Farbverlauf von der Mitte aus zu füllen?

Es gab ein Beispiel für einen vertikalen Farbverlauf hier - https://www.mql5.com/ru/code/31689

Das ist ganz einfach.
Sie brauchen nur eine Formel:

R2 = X2+Y2

Ich glaube, ich habe sogar die Funktion

 
Vitaliy Kuznetsov #:

Gibt es in Canvas eine Möglichkeit, den Bildschirm mit einem kreisförmigen Farbverlauf von der Mitte aus zu füllen?

Es gab ein Beispiel für einen vertikalen Farbverlauf hier - https://www.mql5.com/ru/code/31689

können Sie diese Option verwenden:

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]);
         }
      }
   }
}
Farbverlauf geht auch über Alphakanal (Transparenz)
Dateien:
 
Nikolai Semko #:

können Sie diese Option verwenden:

Farbverlauf geht auch über Alphakanal (Transparenz)

Danke, ich werde es ausprobieren.

 

Nikolai, hallo!

Ich habe dich einmal gebeten, Schieberegler zu erstellen, um den Zeitraum für die Anzeige des Diagramms bequem zu wählen

meinte ich dies:


sehr praktisch!
 
Renat Akhtyamov #:

Nikolai, hallo!

Ich habe dich einmal gebeten, Schieberegler zu erstellen, um den Zeitraum für die Anzeige des Diagramms bequem zu wählen

meinte ich dies:


sehr bequem!
Erstens ist das nicht sehr praktisch (IMHO).
Zweitens sind solche Umsetzungen zeitaufwendig
 
Nikolai Semko #:
Erstens ist es nicht sehr bequem (IMHO)
Die Sache ist die, dass man bei der Implementierung von so etwas unweigerlich mit einem katastrophalen Mangel an Schiebereglerlänge konfrontiert wird.
In der Regel wird dies in einem einzigen Schieberegler implementiert, nicht in einem, dessen Breite durch Ziehen der Schaltfläche an den Rändern geändert werden kann, wodurch sich der Maßstab ändert. Dieser Ansatz löst jedoch nicht das Problem der Schiebereglerlänge, obwohl er bequemer ist.