Ci sono due oggetti bmp con canali di trasparenza. Quando si sovrappongono, appaiono alcuni colori uint. Come posso calcolare da solo questi valori se conosco i colori uint dei pixel sovrapposti di ogni oggetto?
fxsaber: Ci sono due oggetti bmp con canali di trasparenza. Quando si sovrappongono, vengono generati alcuni colori uint. Come posso calcolare da solo questi valori se conosco i colori uint dei pixel sovrapposti di ogni oggetto?
staticuchar GetA(constuint fromcolor){return(uchar((fromcolor)>>24));}
staticuchar GetR(constuint fromcolor){return(uchar((fromcolor)>>16));}
staticuchar GetG(constuint fromcolor){return(uchar((fromcolor)>>8));}
staticuchar GetB(constuint fromcolor){return(uchar(fromcolor));}
staticuint ARGBToColor(constuchar a,constuchar r,constuchar g,constuchar b){return((a<<24)|(r<<16)|(g<<8)|(b));}
staticuint cColor::Mix(constuint bottom,constuint top)
{
//===============// if top color is not transparent => no mixing required//===============if(cColor::GetA(top)==UCHAR_MAX)return(top);
//===============//===============staticuint bottomprev=0;
staticuint topprev=0;
staticuint resultprev=0;
//===============//===============if(bottomprev==bottom && topprev==top)return(resultprev);
//===============//===============
bottomprev=bottom;
topprev=top;
//===============//===============// Get Params of Colors//===============double topA=(double)cColor::GetA(top); double bottomA=(double)cColor::GetA(bottom);
double topR=(double)cColor::GetR(top); double bottomR=(double)cColor::GetR(bottom);
double topG=(double)cColor::GetG(top); double bottomG=(double)cColor::GetG(bottom);
double topB=(double)cColor::GetB(top); double bottomB=(double)cColor::GetB(bottom);
//===============//===============// Blend components//===============uchar newA=uchar(topA+(bottomA*(255.0-topA)/255.0));
uchar newR=uchar((topR*topA/255.0)+(bottomR*bottomA *(255.0-topA)/(255.0*255.0)));
uchar newG=uchar((topG*topA/255.0)+(bottomG*bottomA *(255.0-topA)/(255.0*255.0)));
uchar newB=uchar((topB*topA/255.0)+(bottomB*bottomA *(255.0-topA)/(255.0*255.0)));
//===============//===============
resultprev=cColor::ARGBToColor(newA,newR,newG,newB);
//===============//===============// New Color//===============return(resultprev);
//===============
}
Grazie! Un'altra domanda. Se, per esempio, cinque oggetti si sovrappongono nello stesso momento, le coppie (alto/basso) devono essere fatte dal basso verso l'alto o dall'alto verso il basso?
Grazie! Un'altra domanda. Se, per esempio, cinque oggetti si sovrappongono, le coppie (in alto/basso) devono essere disegnate dal basso verso l'alto o dall'alto verso il basso?
Devo disegnare a strati, in ordine (zorder), dal basso verso l'alto, perché devo assumere che non so quali pixel dei cinque oggetti si intersecheranno. Come su una vera tela.
Disegno a strati, secondo l'ordine (come zorder), dal basso verso l'alto, perché non è immediatamente chiaro quali pixel dei cinque oggetti si sovrapporranno. Come su una vera tela.
Dopo averla mescolata, si ottiene qualcosa del genere.
È fantastico! Stai usando CCanvas o è una soluzione tutta tua? Quale approccio è migliore a lungo termine?
Grande! Stai usando un CCanvas raffinato o una soluzione completamente tua? Quale approccio è migliore a lungo termine?
Ho dovuto scrivere il mio, ma con significativi frammenti di codice presi in prestito dalla libreria standard (algoritmi di disegno primitivo, anti-aliasing, ecc.). Imprigionare pezzi di codice nel mio concetto di lavoro con la grafica si è rivelato più facile che avvolgere il mio concetto intorno alla libreria standard.
Non mi dispiacerebbe usare la libreria standard se fosse "live", ma finora non è adattata alla GUI in alcun modo.
Ho dovuto scrivere il mio, ma con un prestito significativo di pezzi di codice dalla libreria standard (algoritmi di disegno primitivo, anti-aliasing, ecc.). Imprigionare pezzi di codice nel mio concetto di lavoro con la grafica si è rivelato più facile che avvolgere il mio concetto intorno alla libreria standard.
Non mi dispiacerebbe usare la libreria standard, se fosse "live", ma finora non è adattata alla GUI in alcun modo.
#include <Expert\ExpertSignal.mqh>
voidOnStart()
{
CIndicator* a = NULL;
CExpertSignal b;
b.InitIndicators(a); // 'InitIndicators' - no one of the overloads can be applied to the function call
}
Ci sono due oggetti bmp con canali di trasparenza. Quando si sovrappongono, vengono generati alcuni colori uint. Come posso calcolare da solo questi valori se conosco i colori uint dei pixel sovrapposti di ogni oggetto?
Grazie! Un'altra domanda. Se, per esempio, cinque oggetti si sovrappongono nello stesso momento, le coppie (alto/basso) devono essere fatte dal basso verso l'alto o dall'alto verso il basso?
Grazie!
Meglio disegnare tutti gli oggetti (bmp) sulla stessa tela in una volta sola, è un approccio più semplice a lungo termine.
È meglio disegnare tutti gli oggetti (bmp) su una tela in una volta sola, è un approccio più semplice a lungo termine.
Ecco perché lo chiedo. Sopra c'è un'altra domanda.
Grazie! Un'altra domanda. Se, per esempio, cinque oggetti si sovrappongono, le coppie (in alto/basso) devono essere disegnate dal basso verso l'alto o dall'alto verso il basso?
Devo disegnare a strati, in ordine (zorder), dal basso verso l'alto, perché devo assumere che non so quali pixel dei cinque oggetti si intersecheranno. Come su una vera tela.
Dopo il mix, appare così
Disegno a strati, secondo l'ordine (come zorder), dal basso verso l'alto, perché non è immediatamente chiaro quali pixel dei cinque oggetti si sovrapporranno. Come su una vera tela.
Dopo averla mescolata, si ottiene qualcosa del genere.
È fantastico! Stai usando CCanvas o è una soluzione tutta tua? Quale approccio è migliore a lungo termine?
Grande! Stai usando un CCanvas raffinato o una soluzione completamente tua? Quale approccio è migliore a lungo termine?
Ho dovuto scrivere il mio, ma con significativi frammenti di codice presi in prestito dalla libreria standard (algoritmi di disegno primitivo, anti-aliasing, ecc.). Imprigionare pezzi di codice nel mio concetto di lavoro con la grafica si è rivelato più facile che avvolgere il mio concetto intorno alla libreria standard.
Non mi dispiacerebbe usare la libreria standard se fosse "live", ma finora non è adattata alla GUI in alcun modo.
Ho dovuto scrivere il mio, ma con un prestito significativo di pezzi di codice dalla libreria standard (algoritmi di disegno primitivo, anti-aliasing, ecc.). Imprigionare pezzi di codice nel mio concetto di lavoro con la grafica si è rivelato più facile che avvolgere il mio concetto intorno alla libreria standard.
Non mi dispiacerebbe usare la libreria standard, se fosse "live", ma finora non è adattata alla GUI in alcun modo.
Ora capisco, grazie.