Qui ho applicato diversi colori: ho applicato un colore con trasparenza (canale alfa 255) al colore di sfondo (canale alfa 128). Ho una domanda - quale formula viene usata per calcolare il colore finale dei pixel per le modalità COLOR_FORMAT_ARGB_RAW e COLOR_FORMAT_ARGB_NORMALIZE.
В компьютерной графике альфа-композиция обозначает процесс комбинирования изображения с фоном с целью создания эффекта частичной прозрачности. Этот метод часто применяется для многопроходной обработки изображения по частям с последующей комбинацией этих частей в единое двумерное результирующее изображение. Таким образом, альфа канал...
Dove è sbagliato: le costanti di colore memorizzano i dati sbagliati o la funzione PrintFormat non funziona bene?
Ecco uno script che emette colori in forma di interi tramite PrintFormat:
//+------------------------------------------------------------------+//| Script_test.mq5 |//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//--- зададим прозрачностьuchar alfa=0x80; // значение 0x80 означает 128/255=50 % прозрачности //--- выведем преобразование в ARGB для цвета clrBluePrintFormat("0x%.8X - clrBlue",clrBlue);
PrintFormat("0x%.8X - clrBlue ARGB with alfa=0x80 (transparency 50%%)",ColorToARGB(clrBlue,alfa));
//--- выведем преобразование в ARGB для цвета clrGreenPrintFormat("0x%.8X - clrGreen",clrGreen);
PrintFormat("0x%.8X - clrGreen ARGB with alfa=0x80 (transparency 50%%)",ColorToARGB(clrGreen,alfa));
//--- выведем преобразование в ARGB для цвета clrRedPrintFormat("0x%.8X - clrRed",clrRed);
PrintFormat("0x%.8X - clrRed ARGB with alfa=0x0x80 (transparency 50%%)",ColorToARGB(clrRed,alfa));
}
//+------------------------------------------------------------------+
TheXpert: Questo è corretto. È solo che ARGB ha un diverso formato di memorizzazione dei dati rispetto a Color.
Il formato di registrazione dovrebbe essere lo stesso: prima il canale alfa (se c'è) poi RGB. Secondo l'aiuto tipo Colore record blu attraverso i letterali:
C'0x00,0x00,0xFF'// blu
Cioè, in rappresentazione intera, il colore blu (senza canale alfa) dovrebbe essere scritto come: 0x0000FF. Ma lo script di test emette il colore blu al contrario:
Con COLOR_FORMAT_ARGB_RAW, il metodoTransparentLevelSet con parametro "0" (trasparenza completa) produce una quasi-trasparenza, ma chiaramente non una trasparenza completa.
Il metodo COLOR_FORMAT_ARGB_RAWTransparentLevelSet con il parametro "0" (trasparenza completa) rende la trasparenza vicina a quella completa ma ovviamente non completa.
Chiarimento: la trasparenza residua al livello di trasparenza "0" si osserva solo su x32. Non c'è trasparenza residua su x64:
Questo comportamento del kanvas in modalità COLOR_FORMAT_ARGB_RAW è un bug o una caratteristica del disegno nei sistemi x32 e x64?
Gradiente orizzontale sul kanvas.
Leggermente migliorato il codice, e introdotto anche una variabile che è responsabile della velocità di rendering:
Cambiare la velocità di visualizzazione è fatto aggiornando la tela non dopo ogni disegno della linea, ma a intervalli.
La dimensione dello scarto è calcolata utilizzando l'operazione aritmetica "resto della divisione":
Qui ho applicato diversi colori: ho applicato un colore con trasparenza (canale alfa 255) al colore di sfondo (canale alfa 128). Ho una domanda - quale formula viene usata per calcolare il colore finale dei pixel per le modalità COLOR_FORMAT_ARGB_RAW e COLOR_FORMAT_ARGB_NORMALIZE.
Se fate riferimento all'articolo Calcolo del colore risultante, i calcoli non corrispondono.
Dove è sbagliato: le costanti di colore memorizzano i dati sbagliati o la funzione PrintFormat non funziona bene?
Ecco uno script che emette colori in forma di interi tramite PrintFormat:
Risultato di uscita:
PerchéclrRed è rappresentato come0x000000FF e non0x00FF0000? Perché il rosso è C'255,0,0'.
PerchéclrBlue è rappresentato come0x00FF0000 e non0x0000FF? Perché il blu è C'0,0,255'.
Questo è corretto. È solo che ARGB ha un diverso formato di memorizzazione dei dati rispetto a Color.
Il formato di registrazione dovrebbe essere lo stesso: prima il canale alfa (se c'è) poi RGB. Secondo l'aiuto tipo Colore record blu attraverso i letterali:
C'0x00,0x00,0xFF'// blu
Cioè, in rappresentazione intera, il colore blu (senza canale alfa) dovrebbe essere scritto come: 0x0000FF. Ma lo script di test emette il colore blu al contrario:
Si scopre che il colore è scritto al contrario nelle costanti di colore.
Si scopre che il colore è scritto al contrario nelle costanti di colore.
Con COLOR_FORMAT_ARGB_RAW, il metodoTransparentLevelSet con parametro "0" (trasparenza completa) produce una quasi-trasparenza, ma chiaramente non una trasparenza completa.
Il metodo COLOR_FORMAT_ARGB_RAWTransparentLevelSet con il parametro "0" (trasparenza completa) rende la trasparenza vicina a quella completa ma ovviamente non completa.
Chiarimento: la trasparenza residua al livello di trasparenza "0" si osserva solo su x32. Non c'è trasparenza residua su x64:
Questo comportamento del kanvas in modalità COLOR_FORMAT_ARGB_RAW è un bug o una caratteristica del disegno nei sistemi x32 e x64?
Chiarimento: la trasparenza residua al livello di trasparenza "0" si osserva solo su x32. Non c'è trasparenza residua su x64:
Questo comportamento del kanvas in modalità COLOR_FORMAT_ARGB_RAW è un bug o una caratteristica del disegno nei sistemi x32 e x64?