Mostrar imagen en Color o en Niveles de Gris

04/06/2004 - 01:11 por Willser F. González C. | Informe spam
Tengo una vector de 262144 bytes, tipo unsigned char, que corresponde a una
imagen de 512 * 512 en niveles de gris, y debo mostrarla en pantalla, pero
si lo hago con SetPixel esto me consume mucho tiempo; así que otra opción
rápida es crear un CBitmap y asignarle a éste los datos del vector, pero no
he logrado que me muestre la imagen en niveles de gris, siempre muestra
puntos blancos y negros pero si ningún significado.

Alguien me podría indicar cual es el procedimiento para mostrar bien estas
imágenes o indicarme algunos sitios con ejemplos al respecto, he buscado por
la MSDN e Internet, pero por ahora no logro encontrar algo, utilizando sólo
funciones de la API y de MFC.


CDC *l_pcdcDC1 = m_csCdroImgen.GetDC(); // m_csCdroImgen es un CStatic
de un control Picture.
CDC *l_pcdcDC2 = new CDC;

CBitmap l_cbmBitMap, *l_pcbmOldBitMap;


// Cargar la imagen que está en el vector.

l_pcdcDC2->CreateCompatibleDC(l_pcdcDC1);

l_cbmBitMap.CreateCompatibleBitmap(l_pcdcDC2, 512, 512);
l_cbmBitMap.SetBitmapBits(512 * 512, m_pucImgen); // m_pucImgen es el
vector con los bytes de la imagen.

l_pcbmOldBitMap = l_pcdcDC2->SelectObject(&l_cbmBitMap);


// Mostrar la imagen: sólo muestra puntos desordenados.

l_pcdcDC1->StretchBlt(0, 0, m_sAnchoArchvo, m_sAltoArchvo, l_pcdcDC2, 0, 0,
m_sAnchoArchvo,
m_sAltoArchvo, SRCCOPY);


// En cambio, si cargo la imagen con SetPixel, como se indica a
continuación, ésta se visualiza bien.

k = 0;

for (i = 0; i < 512; i++)
for (j = 0; j < 512; j++)
l_pcdcDC2->SetPixelV(j, i, RGB(m_pucImgen[k], m_pucImgen[k],
m_pucImgen[k++]));
 

Leer las respuestas

#1 Miguel
04/06/2004 - 01:29 | Informe spam
"Willser F. González C." escribía:

Tengo una vector de 262144 bytes, tipo unsigned char, que corresponde a una
imagen de 512 * 512 en niveles de gris, y debo mostrarla en pantalla, pero
si lo hago con SetPixel esto me consume mucho tiempo; así que otra opción
rápida es crear un CBitmap y asignarle a éste los datos del vector, pero no
he logrado que me muestre la imagen en niveles de gris, siempre muestra
puntos blancos y negros pero si ningún significado.

Alguien me podría indicar cual es el procedimiento para mostrar bien estas
imágenes o indicarme algunos sitios con ejemplos al respecto, he buscado por
la MSDN e Internet, pero por ahora no logro encontrar algo, utilizando sólo
funciones de la API y de MFC.




Busca CreateDIBitmap().

Ya tienes el array de bits. Tienes que create el BITMAPINFO (header y
paleta de grises). CBM_INIT / DIB_RGB_COLORS.

El resultado es un ddb que puedes seleccionar en un memory device
context.

Saludos

Miguel

Preguntas similares