Lo que comenta NEBIRE sobre las mascaras tambien las he usado en algunos controles como el Display hexadecimal o el Display Matrix, para poder elegir entre 16 millones de colores para el color del LED, fue lo mejor porque antes tenia solo 3 colores, los 3 bitmaps)
os dejo aqui el link de la web para que podais ver las capturas de pantalla.
http://windevelop.hol.es
El unico que puede descargarse es el DisplayHEX.
mmm... al leerte, me parece entender que usas las máscaras a nivel de byte, para elegir color. Aunque es la misma esencia, aplicado a una superficie, el concepto cambia. Creo que no hablamos de lo mismo...
Una máscara de bits, sirve para permitir que determinados bits, sigan ahí, o para filtrarlos y por tanto que permanezca el resto menos esos...
Una máscara de imagen (hace lo mismo), opera sobre un array de píxeles y en esencia esa máscara contiene solo dos valores en sus píxeles: blanco (todos los bits a 1) o negro (todos los bits a cero). La imagen de máscara es luego operada pixel a píxel con otra imagen para muy diferentes efectos, desde las transparencias hasta definir regiones (añadir, excluir regiones)... con el uso de la máscara, básicamente cada píxel de ella, 'decide' si se acepta o rechaza por completo, el píxel de destino, ya que:
'1' and píxel = píxel
'0' and pixel = 0
'1' or píxel = 1
'0' or pixel = pixel
Y con solo esas 4 operaciones, pueden desde crearse máscaras, a bloquear píxeles, asignarlos, o convertirlos en blanco o negro (esto es crear otra máscara, partiendo de una imagen y otra máscara, lo que sirve para añadir o eliminar regiones, permitiendo el 'clipping' sobre regiones).
En un control tan simple, como un display LCD, no tiene mucho sentido usar máscaras (de imagen), puede dibujarse perfectamente solo con el método line. Ni siquiera hace falta recurrir a las APIs GDI, para ese control, el método Line es suficientemente rápido, como para no requerir nada más. Redibujar el control probablemente no requiera más de una diezmilésima de segundo, aunque GDI, lo redujera a la mitad o a un tercio, es imperceptible a esa escala.
------------------------------------------------------
...luego de mirar tu página y bajando ese control, me ha sorprendido

negativamente

el enorme tamaño que tiene compilado... la friolera de 204kb. y tras ponerlo en un proyecto, me

decepciona

aún más, que básicamente tiene solo

7 propiedades específicas

del control: 3 para elegir el color, 1 para preselecciones de colores, Digitos, Value, SizeDisplay y la innecesaria (a mi juicio) LeftZero). Muy poca funcionalidad y opciones para 204kb.
En general lo que hace aumentar el tamaño de un control son los recursos, cuando uno añade muchas imágenes, sonidos o textos. Pero el control carece de sonido, no necesita imágenes y tampoco

están documentadas

las propiedades.

-------------------------------------
Se me ha ocurrido hacer un control, del mismo tipo, un Display-LCD de 7 segmentos... y bueno, le he añadido todas las propiedades que se me han ocurido, sumo hasta 18, con muchas opciones (por ejemplo el tamaño, va de 0 a 12 (no de 0-2 como en el tuyo), los digitos van de 0-255 tamaño de 1 byte, si también 0, el tuyo va de 1-32, aunque puede valer porqué limitarlo tanto, cómo sabemos que alguien no fuera a necesitar 40 caracteres. El tamaño de byte, es un límite perfecto para estos casos?
En mi caso, la cantidad de tamaños posibles junto a otra propiedad 'proporción' (que decide el valor de cuadrícula, de los dígitos para el ancho y alto (9x5, 9x6, 8x5,10x7, etc...hasta 21 distintos)) permiten un total de 13x21 = 273 combinaciones diferentes). En mi control el tamaño en realidad lo que define es el grosor del segmento... lo que hace que el tamaño final del control dependa también del valor de 'proporcion' y el número de dígitos. También añadí otra propiedad DigitoDecim, que actúa como si fueran decimales, aunque básicamente lo que permite es elegir otro color para ellos...
En fin tal como figura en la imagen que adjunto de ejemplo...

y después de compilado, solo pesa 60kb. teniendo en cuenta que si solo compilas un control en VB6, sin nada de código, tiene un tamaño de 20kb.
Se puede afirmar que el código ocupa solo 40kb. y eso que le he metido todas las propiedades que he imaginado (y media docena de eventos)... incluso una llamada 'displayTime', que al activarla a True, el control 'se convierte' en un reloj digital, que se actualiza cada segundo. Incluso una propiedad para elegir que base numérica soportar: Octal, Decimal o Hexadecimal... Caracteres como el guión bajo, medio y alto están disponibles en todos los casos.
Total, que si a tu control le quitamos esos 20 kb. se queda en 184, frente a los 40 del mío.... siento enorme curiosidad por saber que código contiene para estar inflado 4'5 veces el tamaño, con sólo la cuarta-quinta parte de la funcionalidad, que yo le he puesto a éste...
----------------------------------------------

...y bueno, se me ocurre que ya que me he tomado la molestia de hacer este control, documentaré todas las propiedades, y cuando lo recompile, lo dejaré disponible como recurso en el foro...
