Aquí he aplicado diferentes colores: he aplicado un color con transparencia (canal alfa 255) al color de fondo (canal alfa 128). Tengo una pregunta: ¿qué fórmula se utiliza para calcular el color final del píxel para los modos COLOR_FORMAT_ARGB_RAW y COLOR_FORMAT_ARGB_NORMALIZE?
В компьютерной графике альфа-композиция обозначает процесс комбинирования изображения с фоном с целью создания эффекта частичной прозрачности. Этот метод часто применяется для многопроходной обработки изображения по частям с последующей комбинацией этих частей в единое двумерное результирующее изображение. Таким образом, альфа канал...
¿Dónde está el error: las constantes de color almacenan datos erróneos o la función PrintFormat funciona mal?
Aquí hay un script que muestra los colores en forma de enteros a través de 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: Esto es correcto. Es que ARGB tiene un formato de almacenamiento de datos diferente al de Color.
El formato de grabación debe ser el mismo: primero el canal alfa (si lo hay) y luego RGB. De acuerdo con la ayuda Tipo de registro de color azul a través de los literales:
C'0x00,0x00,0xFF'// azul
es decir, en representación entera, el color azul (sin canal alfa) debe escribirse como: 0x0000FF. Pero el script de prueba emite el color azul al revés:
Con COLOR_FORMAT_ARGB_RAW, el métodoTransparentLevelSet con el parámetro "0" (transparencia total) produce una casi-transparencia, pero claramente no una transparencia total.
Con COLOR_FORMAT_ARGB_RAW, el métodoTransparentLevelSet con el parámetro "0" (transparencia total) produce una casi-transparencia pero claramente no una transparencia total.
Aclaración: la transparencia residual en el nivel de transparencia "0" sólo se observa en x32. No hay transparencia residual en x64:
¿Este comportamiento del kanvas en el modo COLOR_FORMAT_ARGB_RAW es un error o una característica del dibujo en sistemas x32 y x64?
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Gradiente horizontal en el lienzo.
Se ha mejorado ligeramente el código, y también se ha introducido una variable que es responsable de la velocidad de renderizado:
El cambio de velocidad de visualización se realiza actualizando el lienzo no después de cada dibujo de la línea, sino a intervalos.
El tamaño del hueco se calcula mediante la operación aritmética "resto de la división":
Aquí he aplicado diferentes colores: he aplicado un color con transparencia (canal alfa 255) al color de fondo (canal alfa 128). Tengo una pregunta: ¿qué fórmula se utiliza para calcular el color final del píxel para los modos COLOR_FORMAT_ARGB_RAW y COLOR_FORMAT_ARGB_NORMALIZE?
Si te refieres al artículo Cálculo del color resultante, los cálculos no coinciden.
¿Dónde está el error: las constantes de color almacenan datos erróneos o la función PrintFormat funciona mal?
Aquí hay un script que muestra los colores en forma de enteros a través de PrintFormat:
Resultado de la salida:
¿Por quéclrRed se representa como0x000000FF y no como0x00FF0000? Porque el rojo es C'255,0,0'.
¿Por quéclrBlue se representa como0x00FF0000 y no como0x0000FF? Porque el azul es C'0,0,255'.
Esto es correcto. Es que ARGB tiene un formato de almacenamiento de datos diferente al de Color.
El formato de grabación debe ser el mismo: primero el canal alfa (si lo hay) y luego RGB. De acuerdo con la ayuda Tipo de registro de color azul a través de los literales:
C'0x00,0x00,0xFF'// azul
es decir, en representación entera, el color azul (sin canal alfa) debe escribirse como: 0x0000FF. Pero el script de prueba emite el color azul al revés:
Resulta que el color se escribe al revés en las constantes de color.
Resulta que el color se escribe al revés en las constantes de color.
Con COLOR_FORMAT_ARGB_RAW, el métodoTransparentLevelSet con el parámetro "0" (transparencia total) produce una casi-transparencia, pero claramente no una transparencia total.
Con COLOR_FORMAT_ARGB_RAW, el métodoTransparentLevelSet con el parámetro "0" (transparencia total) produce una casi-transparencia pero claramente no una transparencia total.
Aclaración: la transparencia residual en el nivel de transparencia "0" sólo se observa en x32. No hay transparencia residual en x64:
¿Este comportamiento del kanvas en el modo COLOR_FORMAT_ARGB_RAW es un error o una característica del dibujo en sistemas x32 y x64?
Aclaración: la transparencia residual en el nivel de transparencia "0" sólo se observa en x32. No hay transparencia residual en x64:
¿Este comportamiento del kanvas en el modo COLOR_FORMAT_ARGB_RAW es un error o una característica del dibujo en sistemas x32 y x64?