Hola, no sé si esto servirá. Genera una matriz de tamaño definido por una variable de pares de colores legibles de tinta y papel. También añado una función que busca color contrastante a partir de uno dado —es decir, busca un par que sea legible con el primero para conseguir parejas papel tinta, eso, legibles—. Por supuesto, con mi estilo barrocofarragosolioso:
Código:
Public Function aiBuscaParColor(iNum As Integer, iOpcion As Integer) As Integer[]
'' === gb.image.Color.HSV''
'***** Obtener iNum pares de color de Papel y Tinta aleatorios según las'
' posibles opciones.'
'>>>>> iNum, número total de pares de color, primero Papel y luego Tinta.'
'>>>>> iOpcion:'
'0: Colores pastel (papel claro, tinta mismo tono oscuro)'
'1: Suave (papel oscuro, tinta mismo tono claro)'
'2: Alto contraste (papel negro, tinta brillante)'
'3: Resaltado (papel brillante, tinta negra)'
'4: Al azar con colores contrastantes'
'<<<<< Una matriz con iNum pares de color [Papel, Tinta], según especifica'
' iOpcion.'
If iNum = 0 Then Return
Dim aiRes As New Integer[iNum, 2] ' Resultado [Papel, Tinta]'
Dim iPapelH, iPapelS, iPapelV As Byte
Dim iTintaH, iTintaS, iTintaV As Byte
Dim i As Integer
Dim iGiro As Byte = CByte(150 / 360 * 256)
Select Case iOpcion
Case iPastel
For i = 0 To iNum - 1
iPapelH = CByte(Rnd(0, 255))
iPapelS = 128
iPapelV = 255
iTintaH = iPapelH
iTintaS = 255
iTintaV = 128
aiRes[i, 0] = Color.HSV(iPapelH, iPapelS, iPapelV)
aiRes[i, 1] = Color.HSV(iTintaH, iTintaS, iTintaV)
Next
Case iInvPastel
For i = 0 To iNum - 1
iPapelH = CByte(Rnd(0, 255))
iPapelS = 255
iPapelV = 128
iTintaH = iPapelH
iTintaS = 128
iTintaV = 255
aiRes[i, 0] = Color.HSV(iPapelH, iPapelS, iPapelV)
aiRes[i, 1] = Color.HSV(iTintaH, iTintaS, iTintaV)
Next
Case iContraste
For i = 0 To iNum - 1
iTintaH = CByte(Rnd(0, 255))
iTintaS = 255
iTintaV = 255
aiRes[i, 0] = Color.HSV(0, 0, 0)
aiRes[i, 1] = Color.HSV(iTintaH, iTintaS, iTintaV)
Next
Case iResaltado
For i = 0 To iNum - 1
iPapelH = CByte(Rnd(0, 255))
iPapelS = 255
iPapelV = 255
aiRes[i, 0] = Color.HSV(iPapelH, iPapelS, iPapelV)
aiRes[i, 1] = Color.HSV(0, 0, 0)
Next
Case iAzar
For i = 0 To iNum - 1
iPapelH = CByte(Rnd(0, 255))
iPapelS = CByte(Rnd(0, 255))
iPapelV = CByte(Rnd(0, 255))
If iPapelH > 255 - iGiro Then
iTintaH = iGiro - (255 - iPapelH)
Else
iTintaH = iGiro + iPapelH
Endif
If iPapelS > 255 - iGiro Then
iTintaS = iGiro - (255 - iPapelS)
Else
iTintaS = iGiro + iPapelS
Endif
If iPapelV > 255 - iGiro Then
iTintaV = iGiro - (255 - iPapelV)
Else
iTintaV = iGiro + iPapelV
Endif
aiRes[i, 0] = Color.HSV(iPapelH, iPapelS, iPapelV)
aiRes[i, 1] = Color.HSV(iTintaH, iTintaS, iTintaV)
Next
End Select
Return aiRes
End
Código:
Public Function iTintaxContraste(Colorfondo As Integer, booTotal As Boolean) As Integer
'' === gb.image.Color''
'***** Devuelve un color de tinta que sea contrastante con un color de fondo —o viceversa— y que resulte legible. '
'>>>>> Colorfondo: El color sobre el que hay que escribir'
'>>>>> booTotal : Si: devuelve blanco o negro, según la luminancia'
' No: devuelve un color con el matiz girado 60º en la rueda cromática.'
'<<<<< Color de tinta adecuado para ese fondo —o viceversa—'
Dim ci As ColorInfo
Dim bMatiz As Byte
Dim bSatur As Byte
Dim bValor As Byte
Dim bLumin As Byte
ci = Color[Colorfondo]
If booTotal = Si Then
bLumin = ci.Luminance
' El límite de contraste está entre 128 y 150 sobre 256 según varios autores'
If bLumin > 128 Then
Return Color.Black
Else
Return Color.White
Endif
Else
bMatiz = ci.Hue
bSatur = ci.Saturation
bValor = ci.Value
' 60 / 360 * 256 = 43, esto gira 60º el color en la rueda de matiz'
' Si pasa de 255, auntomáticamente se reinicia, por lo que no es necesario'
' control de exceso.'
bMatiz = bMatiz + 43
bValor = bValor + 85
Return Color.HSV(bMatiz, bSatur, bValor)
Endif
End
¿Te vale?
También se pueden hacer escalas sobre determinado tono a elegir o una serie de colores temáticos, p.e. complementarios —los complementarios están a 180º, pero se puede dividir en tantos intervalos como se quiera—. En fin, ya dirás.
Edito para poner ejemplos de las cinco opciones que tiene:
![[Imagen: 2eLGn8hl.png]](https://i.imgur.com/2eLGn8hl.png)
![[Imagen: CpslFdyl.png]](https://i.imgur.com/CpslFdyl.png)
![[Imagen: cTloeUZl.png]](https://i.imgur.com/cTloeUZl.png)
![[Imagen: GKmyDLll.png]](https://i.imgur.com/GKmyDLll.png)