Red de conocimiento informático - Conocimiento informático - ¿Cómo utilizar la programación C para escanear imágenes?

¿Cómo utilizar la programación C para escanear imágenes?

El escaneo es la forma más básica de mostrar efectos especiales. No divide la imagen en bloques, sino que muestra la imagen de forma secuencial, fila por fila o columna por columna. El siguiente proceso es la implementación del código del escaneo descendente.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Se utiliza para mostrar datos de mapa de bits* *Valor de retorno: *Ninguno* *Descripción: Esta función implementa el efecto de escanear y mostrar imágenes* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * PDC)//Escanear y mostrar la imagen {int ancho de mapa de bits = getdimensions(). CX; //Obtiene el ancho de la imagen de origen en píxeles, int bitmap height = getdimensions(). cy; //Obtiene la altura de la imagen de origen, crect rect (0, 0, ancho del mapa de bits, altura del mapa de bits) en píxeles; //Crea un rectángulo con el tamaño de la imagen de origen CBrush brush(RGB(255, 255, 255). )); //Establece el pincel en blanco pDC-gt; fill rect(&rect amp;brush); //Restablece la imagen original mostrada en blanco para actualizar la pantalla. LPBitMapInfo pbitMapInfo =(BitMapInfo *)m _ lpbmpinfohead;// Para satisfacer las necesidades de la función StretchDIBits, el puntero del encabezado de la imagen se fuerza al tipo LPBITMAPINFO para (int j = 0; j ltbitmapHeightJ)//Algoritmo específico para escanear visualización de efectos especiales {: { :: StretchDIBits(pDC->-->; GetSafeHdc(), 0, j, bitmapWidth, 1, 0, bitmapHeight-j, bitmapWidth, 1, m_pImgData, pBitmapInfo, DIB_RGB_COLORS, SRCCOPY (); 3); // Retraso de configuración}}

El código anterior llama principalmente a la función StretchDIBits(), que 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 del área rectangular en el mapa de bits de origen y luego mostrarlos como un rectángulo en el contexto del dispositivo de destino. La función StretchDIBits tiene la función de comprimir o estirar el mapa de bits de origen si los rectángulos de origen y destino son de diferentes tamaños. La siguiente es una descripción de los parámetros de la función.

int StretchDIBits(HDC hdc, //identificador de DCint int nDestHeight, //altura del rectángulo de destino int XSrc, //coord x de la fuente en la esquina superior izquierda int YSrc, //coord y de la fuente esquina superior izquierda int nsrc width, //ancho del rectángulo de origen int nSrcHeight, //rectángulo de origen La altura de CONST VOID *lpBits,

HDC hdc: identificador del entorno del dispositivo de destino

XDest: la coordenada X de la esquina superior izquierda del rectángulo de destino es una unidad lógica en el modo de mapeo MM_TEXT. Una unidad lógica es un píxel (consulte otros libros o preguntas sobre el modo de textura);

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

NDestWidth: el ancho del rectángulo de destino, las coordenadas son unidades lógicas;

NDestHeight: la altura del rectángulo de destino, las coordenadas son unidades lógicas;

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

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

NSrcWidth: mapa de bits de origen El ancho rectangular de la imagen, en píxeles;

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

LpBits: los datos de mapa de bits de origen pointer;

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

IUGAGE: consulte la descripción detallada de los parámetros de uso para conocer el uso de la función;

DwRop : Usar compresión o tracción El modo ráster utilizado al extender la función. Para obtener una descripción detallada de los parámetros, consulte MSDN.

Asignamos la función de procesamiento de eventos OnScan() en la clase de vista CCap1_6View. Cuando el programa se esté ejecutando, haga clic en el menú de visualización de escaneo 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 cchap 1_6 view::on scan(){//Obtiene el puntero de m_dib en la clase de documento y accede a los datos dib actuales cchap 1_6 doc * PDOC = Get document(); = pDoc- gt;GetPDib();

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

if(PDI B- gt; m_nBitCount!= 24 amp ampPDI B- gt; m_nBitCount!= 8){

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

Return;

}

//Defina el objeto SpShow de la clase SpecialEffectShow e inicialícelo con los datos DIB actuales.

efecto especial show sp show(PDI B-gt; GetDimensions(),

PDI B-gt; m_nBitCount, PDI b-gt; m_lpColorTable, PDI b-gt; m_pimg data);

//Obtener variables de entorno del dispositivo

CClientDC aDC (this);

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

SpShow. escanear(ampaDC);

}