Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: [EX3] en 01 de Enero de 2003, 04:50:33 PM

Título: Convertir un color a valores RGB de 16bits en VB
Publicado por: [EX3] en 01 de Enero de 2003, 04:50:33 PM
                                Nas y Feliz Año a tod@s:

Estoy implementando una funcion para extraer los componentes RGB de un color devuelto por la funcion GetPixel() de DirectDraw en Visual Basic.

La conversion en 32Bits de color funciona perfectamente, pero cuando ejecuto la funcion en 16Bits, como es logico, el resultado de GetPixel() es diferente y la conversion a RGB no es correcta.

¿Como puedo hacer una conversion de color a RGB en 16Bits que sea fiable?

Salu2...

[EX3]                                
Título: Re: Convertir un color a valores RGB de 16bits en VB
Publicado por: HgH en 01 de Enero de 2003, 11:45:46 PM
                               
Citar"]
Nas y Feliz Año a tod@s:
Igualmente :D

Citar"]
¿Como puedo hacer una conversion de color a RGB en 16Bits que sea fiable?

El modo de 16 bits típico (D3DFMT_R5G6B5) tiene 5 bits de rojo, 6 de verde y 5 de azul.
Para esto, en vb y si no me falla la memoria sería algo como

Function GetR(RGB As Long) As Byte
   GetR = (RGB And &H1F)
End Function
------------------------------------------
Function GetG(RGB As Long) As Byte
   GetG = (RGB And &H7E0) / 32
End Function
------------------------------------------
Function GetB(RGB As Long) As Byte
   GetB = (RGB And &HF800) / 2048
End Function
------------------------------------------

Si el formato de pixel es otro como D3DFMT_X1R5G5B5,D3DFMT_A1R5G5B5, etc,etc, tendrías que comprobarlo y cambiar las máscaras.

PD: No me acuerdo si en vb hay instrucciones para rotado de bits. Si es así cámbia las divisiones por rotaciones.                                
Título: Convertir un color a valores RGB de 16bits en VB
Publicado por: [EX3] en 02 de Enero de 2003, 02:15:53 AM
                                Gracias por contestar  :)

He probado tu codigo en mi programa que uso para probar la funcion de derivado a RGB y este es el resultado:

Color  /  32 Bits   /     16 Bits
--------------------------------
Rojo   /   255,0,0   /    0,0,31
Verde  /  0,255,0   /    0,63,0
Azul   /    0,0,255   /    31,0,0
Amarillo / 255,255,0  /  0,63,31
Blanco / 255,255,255 / 31,63,31

No se si por ser 16 Bits tiene que devolver esos valores, si no es asi seguro que con alguna operacion matematica se pueden cuadrar los resultados con los obtenidos en 32 Bits.
Lo de que el valor de rojo aparezca en el azul y viceversa es un problema que ya experimente, pero que tiene facil solucion.

Sea como sea, mas o menos, ya podria trabajar con la lectura de color en 16 Bits, algo es algo, muchas gracias por la ayuda  :D.

Salu2...

[EX3]                                
Título: Convertir un color a valores RGB de 16bits en VB
Publicado por: HgH en 02 de Enero de 2003, 08:53:23 AM
                               
Citar"]
Color  /  32 Bits   /     16 Bits
--------------------------------
Rojo   /   255,0,0   /    0,0,31
Verde  /  0,255,0   /    0,63,0
Azul   /    0,0,255   /    31,0,0
Amarillo / 255,255,0  /  0,63,31
Blanco / 255,255,255 / 31,63,31

Ups, pequeño (gran) fallo. GetR está devolviendo el componente B y GetB el R.
Los valores son correctos. Ten en cuenta que el valor máximo para una componente de un pixel de 16 bits es 31 en el caso de R y B (son 5 bits-> 2^5 = 32 -> de 0 a 31) y 63 (2^6=64)  en el caso del componente G. Si quieres trabajar con valores de 0 a 255, en cualquier caso, desplaza los componentes R y B 5 bits a la izquierda y el G 6 bits.

Saludos