La tela è forte! - pagina 43

 
khorosh:

Perché dovresti farlo, hai scritto che non hai affatto bisogno di un programma).

Per la bellezza.
 
Реter Konow:

Grazie. Non è un frame .bmp compresso con forza bruta con il comando #resource, vero? ))) Assolutamente no. È un adattatore naturale per riprodurre un file gif su MQL-canvas, basato su un ported .gif-reader, che è stato scritto in un paio d'ore. Devo sembrare un idiota dall'esterno)))

Yuri, grazie per la demo, ma chiunque può fare una cosa del genere. Facile.

  1. Prendete una semplice gif. Registrare su video.
  2. Prendi tutti i suoi fotogrammi dal video.
  3. Salva i fotogrammi in formato .bmp, numerati.

  4. Integrare i frame nello script tramite #resource.

  5. Passate in rassegna i fotogrammi e visualizzateli uno per uno sulla tela in un ciclo infinito.

Come risultato, otteniamo una pseudo-gif che non ha alcuna relazione con la rappresentazione standard del formato gif nei programmi MQL.

//-----------------------------

Aggiunto:

Dirò che ho anche una "pseudo-gif", ma la tecnologia è molto più complessa. Ha una compressione d'autore e un meccanismo di riproduzione. E soprattutto, le "pseudo-gif" sono legate ai loro elementi e sono riprodotte da un array comune. La compressione funziona meglio che tramite la direttiva #resource perché i colori immutabili non vengono registrati da un fotogramma all'altro.


Che tipo di editor video non può aprire le gif animate? Photoshop li apre e mette le cornici in livelli. Ma c'è una soluzione ancora più facile - un servizio online - carica le gif animate lì, in un minuto ottieni una cartella zippata con i singoli fotogrammi.

 
Che senso ha discutere se la soluzione è un porting o no? Il formato è standard, quindi il modo di lavorare con esso deve essere standard e sviluppato contemporaneamente allo sviluppo del formato stesso.
 
File:
puh.ex5  29 kb
 
Yury Kulikov:

 

Saluti.

Qualcuno sa per caso perché non si può disegnare una linea di 2 pixel? Che tipo di discriminazione è questa? )

void CCanvas::PolylineThick(const int &x[],const int &y[],const uint clr,const int size,const uint style,ENUM_LINE_END end_style)
  {
   if(size<=2)
     {
      if(size>0)
         PolylineWu(x,y,clr,style);
      return;
     }
...
 
Spesso significa 'spesso' e 2 pixel non è affatto spesso.
 
Dmitry Fedoseev:
Spesso significa 'spesso' e 2 pixel non è affatto spesso.
Più spesso di 1 pixel )
 
Oleksii Chepurnyi:

Saluti.

Forse qualcuno sa perché non si può disegnare una linea con 2 pixel? Che tipo di discriminazione è questa? )

Sì, e se lo sostituisci con if(size<2), disegna, ma in modo impreciso:


@Nikolai Semko, c'è un problema con lo smoothing?

 
Andrey Khatimlianskii:

@Nikolai Semko, c'è un problema con l'anti-aliasing qui?

Queste funzioni sono scritte terribilmente male. C'è un sacco di roba da recuperare. Nessun anti-aliasing normale, nessuna gestione normale della miscelazione dei colori e della trasparenza. Dovresti semplicemente accartocciarli e buttarli nel cestino, e scriverne di nuovi.
Ne ho già scritto qui.

In ogni caso, dovreste assolutamente sostituire la normale funzione PixelTransform con questa:

https://www.mql5.com/ru/forum/1111/page2553#comment_13054823

Ho iniziato a scrivere la mia versione doppia (dove tutti i parametri di input int sono doppi), ma non l'ho finita e l'ho messa sullo scaffale. Non è un compito molto semplice nonostante la sua apparente semplicità. Beh, non è un problema scriverlo accuratamente, il problema è scrivere una qualità molto alta, in modo che l'algoritmo sia veloce. Il mio problema principale è il perfezionismo.