La tela è forte! - pagina 88

 
Vitaliy Kuznetsov #:

Ho anche notato un errore

Questa immagine ha causato un errore. È sicuramente un PNG, ma non ha DPI nei dati.

//Alcune di esse non hanno dati DPI, ma funzionano.

Come ho già scritto, l'algoritmo di decompressione PNG non è stato sviluppato da me, ma da Zorro 7 anni fa. Per essere più precisi, deve averlo portato da un codice C++. Inoltre, questo codice dava sempre un errore, che io aggiravo semplicemente ignorandolo, dopodiché la decompressione funzionava. Ecco perché potrebbero esserci delle giunzioni. Non ho capito le specifiche del formato PNG e delle sue versioni. Forse è necessario approfondire questo formato o il formato jpg.

In particolare questo file png è storto con quadrati senza trasparenza con maschera di colore a 8 bit invece che a 24 bit.

 
Renat Akhtyamov impostazione degli indicatori....

come questo

Immagino che il mercato lo apprezzerà.

Per questo motivo ho realizzato un esempio con il parsing e il ridimensionamento delle icone su sfondo trasparente.


 
Nikolai Semko #:

Come ho già scritto, l'algoritmo di decompressione PNG non è stato sviluppato da me, ma da Zorro 7 anni fa. Per essere più precisi, deve averlo portato da un codice C++. Inoltre, questo codice dava sempre un errore, che io aggiravo semplicemente ignorandolo, dopodiché la decompressione funzionava. Ecco perché potrebbero esserci delle giunzioni. Non ho capito le specifiche del formato PNG e delle sue versioni. Forse è necessario approfondire questo formato o il formato jpg.

In particolare questo file png è storto con quadrati senza trasparenza con maschera di colore a 8 bit invece che a 24 bit.

Nikolai Semko #:

Ho provato. Ho notato dei quadrati solo in caso di ridimensionamento. Ecco perché il mio algoritmo di ridimensionamento probabilmente non è perfetto. Ho già scritto una volta che questo algoritmo è stato creato al volo letteralmente in mezza giornata molto tempo fa. Ora farei questo algoritmo in modo molto diverso. Ma, purtroppo, non ho ancora tempo.

Mi rendo conto che scrivere un codice per 3+ è un giorno e per 5+ è un mese. E se il progetto è grande, i termini possono essere ancora più ampi.

Su quello che abbiamo, grazie. Per ora è sufficiente.

 

C'è un modo in kanvas per riempire lo schermo con un gradiente circolare dal centro?

C'era un esempio di gradiente verticale qui - https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

canvas ha un modo per riempire lo schermo con un gradiente circolare dal centro?

C'era un esempio di gradiente verticale qui - https://www.mql5.com/ru/code/31689

È facile da fare.
è necessaria solo una formula:

R2 = X2+Y2

Credo di aver dato anche la funzione

 
Vitaliy Kuznetsov #:

canvas ha un modo per riempire lo schermo con un gradiente circolare dal centro?

C'era un esempio di gradiente verticale qui - https://www.mql5.com/ru/code/31689

è possibile utilizzare questa opzione:

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]);
         }
      }
   }
}
il gradiente passa anche per il canale alfa (trasparenza)
File:
 
Nikolai Semko #:

è possibile utilizzare questa opzione:

il gradiente passa anche per il canale alfa (trasparenza)

Grazie, farò una prova.

 

Nikolai, ciao!

Una volta ti ho chiesto di creare dei cursori per rendere comoda la scelta del periodo di visualizzazione del grafico

intendevo questo:


molto comodo!
 
Renat Akhtyamov #:

Nikolai, ciao!

Una volta ti ho chiesto di creare dei cursori per rendere comoda la scelta del periodo di visualizzazione del grafico

intendevo questo:


molto comodo!
In primo luogo, non è molto comodo (IMHO).
In secondo luogo, tali realizzazioni richiedono molto tempo.
 
Nikolai Semko #:
In primo luogo, non è molto conveniente (IMHO).
Il fatto è che quando si implementa una cosa del genere, ci si trova inevitabilmente di fronte a una catastrofica mancanza di lunghezza del cursore.
Di norma, questo viene implementato in un singolo cursore, non in uno, la cui larghezza può essere modificata trascinando il pulsante dai suoi bordi, cambiando così la scala. Ma questo approccio non risolve il problema della lunghezza del cursore, anche se è più comodo.
Motivazione: