Red de conocimiento informático - Conocimiento informático - Cómo escanear imágenes mediante programación en C++.

Cómo escanear imágenes mediante programación en C++.

El escaneo es la forma más básica de mostrar efectos especiales. No divide bloques de imágenes, sino que muestra las imágenes secuencialmente fila por fila o columna por columna. El siguiente programa es una implementación de código de escaneo descendente.

/****************************************** ********************************Nombre de función: * Escanear(CDC *pDC)** Parámetros de función: * CDC *puntero pDC al entorno del dispositivo, utilizado para mostrar datos de mapa de bits**Valor de retorno:*Ninguno**Explicación: Esta función realiza el efecto de escaneo y visualización de imágenes************** * ************************************************** **********/void SpecialEffectShow::Scan(CDC *pDC) //Escanear y mostrar una imagen {int bitmapWidth=GetDimensions().cx;//Obtener el ancho de la imagen de origen en píxeles int bitmapHeight=GetDimensions().cy;//Obtener la altura de la imagen de origen en píxeles CRect rect(0,0,bitmapWidth,bitmapHeight);//Crear un pincel CBrush rectangular(RGB(255,255,255) con el tamaño de la imagen de origen ) ); //Establece el pincel en blanco pDC->FillRect(&rect,&brush);//Restablece la imagen original mostrada en blanco para lograr el efecto de actualizar la pantalla LPBITMAPINFO pBitmapInfo=(BITMAPINFO*)m_lpBmpInfoHead;//es Para satisfacer las necesidades de la función StretchDIBits, fuerce el puntero del encabezado de información de la imagen al tipo LPBITMAPINFO para (int j=0;jGetSafeHdc( ),0 , j, bitmapWidth, 1,0, bitmapHeight-j, bitmapWidth, 1,m_pImgData, pBitmapInfo,DIB_RGB_COLORS, SRCCOPY);Sleep(3);//Establecer retraso}}

El código anterior llamadas principalmente La función StretchDIBits() también se llama en otras visualizaciones de efectos especiales de la clase SpecialEffectShow. La función StretchDIBits es una función API global de Win32. Su función es copiar los datos de un área rectangular en el mapa de bits de origen y luego mostrarlos en un rectángulo en el entorno del dispositivo de destino si el tamaño del rectángulo de origen y el rectángulo de destino son. diferente, la función StretchDIBits Hay una función para comprimir o estirar el mapa de bits de origen. La siguiente es una descripción de los parámetros de esta función.

int StretchDIBits(HDC hdc, // identificador de DCint XDest, // coord x de la esquina superior izquierda de destino int YDest, // coord y de la esquina superior izquierda de destino int nDestWidth, // ancho de rectángulo de destino nDestHeight, // altura del rectángulo de destino XSrc, // coordenada x del origen esquina superior izquierda YSrc, // coordenada y del origen esquina superior izquierda nSrcWidth, // ancho del rectángulo de origen nSrcHeight, // altura de rectángulo de origenCONST VOID *lpBits, // bits de mapa de bitsCONST BITMAPINFO *lpBitsInfo, // datos de mapa de bitsUINT iUsage, // opciones de usoDWORD dwRop // código de operación ráster);

HDC hdc: identificador del entorno del dispositivo de destino;

XDest: Coordenada X de la esquina superior izquierda del rectángulo de destino. La coordenada es una unidad lógica. En el modo de mapeo MM_TEXT, una unidad lógica es un píxel (si tiene preguntas sobre el modo de mapeo, consulte otros libros). o MSDN);

YDest: coordenada Y de la esquina superior izquierda del rectángulo de destino, la coordenada es una unidad lógica;

nDestWidth: el ancho del rectángulo de destino, la coordenada es una unidad lógica;

nDestHeight: la altura del rectángulo de destino, la coordenada es una unidad lógica;

XSrc: especifica la coordenada X de la esquina superior izquierda del rectángulo de origen imagen de mapa de bits, y la unidad de coordenadas es el píxel de la imagen;

YSrc: especifica la imagen de mapa de bits de origen. La coordenada Y de la esquina superior izquierda del rectángulo, la unidad de coordenadas es el píxel de la imagen;

nSrcWidth: el ancho del rectángulo de la imagen de mapa de bits de origen, la unidad de coordenadas es el píxel de la imagen;

nSrcHeight: el bit de origen La altura del rectángulo de la imagen, la unidad de coordenadas es el píxel de la imagen;

lpBits: puntero de datos del mapa de bits de origen;

lpBitsInfo: puntero a la estructura BITMAPINFO del mapa de bits de origen;

iUsage: Cómo para utilizar la función, consulte MSDN para obtener una descripción detallada de los parámetros.

dwRop: el modo ráster utilizado cuando se utiliza la función de compresión o estiramiento, consulte MSDN para obtener una descripción detallada de los parámetros.

Asignamos la función de procesamiento de eventos del menú "Escanear visualización" OnScan () en la clase de vista CChap1_6View Cuando el programa se esté ejecutando, haga clic en el menú "Escanear visualización" para realizar el efecto de visualización de escaneo de la imagen. A continuación se muestra el código para CCap1_6View::OnScan().

void CChap1_6View::OnScan() {//Obtiene el puntero de m_dib en la clase de documento y accede a los datos DIB actuales CChap1_6Doc *pDoc=GetDocument();ImgCenterDib *pDib=pDoc->GetPDib() ;

p>

//Solo procesa imágenes en color o en escala de grises

if(pDib->m_nBitCount!=24&&pDib->m_nBitCount!=8){

::MessageBox( 0,"Solo procesar imágenes en color y escala de grises",MB_OK,0);

return ;

}

//Definir el objeto SpShow de la clase SpecialEffectShow, inicialícela con los datos DIB actuales

SpecialEffectShow SpShow(pDib->GetDimensions(),

pDib->m_nBitCount, pDib->m_lpColorTable, pDib->m_pImgData );

//Obtener variables de entorno del dispositivo

CClientDC aDC(this);

//Llame al escáner y pase el puntero de entorno del dispositivo

SpShow.Scan (&aDC);

}