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