paleta lista hexadecimal fromknowncolor custom colores color c# colors

hexadecimal - lista de colores c#



Conversión de ARBG a RGB con mezcla alfa (3)

Se llama mezcla alfa .

En psuedocode, suponiendo que el color de fondo (mezcla) siempre tiene 255 alfa. También supone que alfa es 0-255.

alpha=argb.alpha() r = (alpha/255)*argb.r() + (1 - alpha/255)*blend.r() g = (alpha/255)*argb.g() + (1 - alpha/255)*blend.g() b = (alpha/255)*argb.b() + (1 - alpha/255)*blend.b()

Nota: es probable que deba ser un poco (más) cuidadoso con los problemas de coma flotante / matemática int y redondeo, según el idioma. Fundidos intermedios en consecuencia

Editado para agregar:

Si no tienes un color de fondo con un alfa de 255, el álgebra se vuelve mucho más complicado. Lo he hecho antes y es un ejercicio divertido para el lector (si realmente necesita saber, haga otra pregunta :).

En otras palabras, qué color C combina en un fondo lo mismo que mezcla A, luego mezcla B. Esto es algo así como calcular A + B (que no es lo mismo que B + A).

Digamos que tenemos un color ARGB:

Color argb = Color.FromARGB(127, 69, 12, 255); //Light Urple.

Cuando se pinta sobre un color existente, los colores se mezclarán. Por lo tanto, cuando se mezcla con blanco, el color resultante es Color.FromARGB(255, 162, 133, 255);

La solución debería funcionar así:

Color blend = Color.White; Color argb = Color.FromARGB(127, 69, 12, 255); //Light Urple. Color rgb = ToRGB(argb, blend); //Same as Color.FromARGB(255, 162, 133, 255);

¿Qué es la implementación de ToRGB ?


si no necesitas saber este pre-render, siempre puedes usar el método win32 de getpixel, creo.

Nota: escribir en iPhone en el centro de Missouri sin acceso de entrada. Buscará un ejemplo real de win32 y verá si hay un equivalente de .net.

En caso de que a alguien le importe y no quiera utilizar la (excelente) respuesta publicada anteriormente, puede obtener el valor de color de un píxel en .Net a través de este enlace, ejemplo de MSDN


Sé que este es un hilo viejo, pero quiero agregar esto:

Public Shared Function AlphaBlend(ByVal ForeGround As Color, ByVal BackGround As Color) As Color If ForeGround.A = 0 Then Return BackGround If BackGround.A = 0 Then Return ForeGround If ForeGround.A = 255 Then Return ForeGround Dim Alpha As Integer = CInt(ForeGround.A) + 1 Dim B As Integer = Alpha * ForeGround.B + (255 - Alpha) * BackGround.B >> 8 Dim G As Integer = Alpha * ForeGround.G + (255 - Alpha) * BackGround.G >> 8 Dim R As Integer = Alpha * ForeGround.R + (255 - Alpha) * BackGround.R >> 8 Dim A As Integer = ForeGround.A If BackGround.A = 255 Then A = 255 If A > 255 Then A = 255 If R > 255 Then R = 255 If G > 255 Then G = 255 If B > 255 Then B = 255 Return Color.FromArgb(Math.Abs(A), Math.Abs(R), Math.Abs(G), Math.Abs(B)) End Function public static Color AlphaBlend(Color ForeGround, Color BackGround) { if (ForeGround.A == 0) return BackGround; if (BackGround.A == 0) return ForeGround; if (ForeGround.A == 255) return ForeGround; int Alpha = Convert.ToInt32(ForeGround.A) + 1; int B = Alpha * ForeGround.B + (255 - Alpha) * BackGround.B >> 8; int G = Alpha * ForeGround.G + (255 - Alpha) * BackGround.G >> 8; int R = Alpha * ForeGround.R + (255 - Alpha) * BackGround.R >> 8; int A = ForeGround.A; if (BackGround.A == 255) A = 255; if (A > 255) A = 255; if (R > 255) R = 255; if (G > 255) G = 255; if (B > 255) B = 255; return Color.FromArgb(Math.Abs(A), Math.Abs(R), Math.Abs(G), Math.Abs(B)); }