¿Por qué la función BitBlt() en VC no puede dibujar un mapa? Acabo de aprender VC y soy un novato entre los novatos. ¡Espero que puedan ayudarme!
Abscisa: aumenta hacia la derecha
Coordenada vertical: disminuye hacia abajo
Cuando la coordenada de origen es (0, 0),
La coordenada p>
Y, si es positiva, sube hasta la parte superior de la ventana y todo lo que se dibuja queda fuera de la ventana.
------------------------------------------- --------------------------------------------------
La memoria DC establece el modo de asignación y el dispositivo DC no establece el modo de asignación. Cuando BitBlt, debe usar cada punto del DC de la memoria para dibujar hasta el punto correspondiente del DC del dispositivo. Dado que los dos DC tienen modos de mapeo diferentes, cada punto no se puede mapear correctamente. Por ejemplo, un punto con coordenadas 100,50 no es el mismo punto de coordenadas que la memoria DC y el dispositivo DC.
La lógica y secuencia correctas son:
Establecer el modo de mapeo del dispositivo DC,
Crear la memoria DC,
Dibujar la imagen,
Copia la imagen de la memoria DC al dispositivo DC:
Intenta usar BitBlt, no uses StretchBlt para COPIAR, por las siguientes razones:
1) Se requiere StretchBlt para estirar. Usando el algoritmo, la velocidad de ejecución definitivamente no es tan rápida como BitBlt
2) El estiramiento de StretchBlt distorsionará los gráficos. Eche un vistazo más de cerca a los siguientes 800 * 600. Después de usar StretchBlt para estirar a pantalla completa, será compatible con Windows. Al comparar el visor de imágenes después de estirar, encontrará que StretchBlt no es una buena opción. Después de la comparación, encontrará que StretchBlt es estúpido.
3) El algoritmo de estiramiento de imágenes tiene varios indicadores que deben tenerse en cuenta: uno es hacer que la imagen no esté lo más distorsionada posible y el otro es aumentar la velocidad de ejecución del algoritmo tanto como sea posible. . La relación entre los dos es una que aumenta y disminuye. StretchBlt no es tan bueno como el efecto de estiramiento producido por algunos programas de imágenes profesionales. Esto se debe a que StretchBlt no es una función de procesamiento de imágenes profesional. Se utiliza principalmente para mejorar la velocidad de ejecución de la función, por lo que se distorsionará. Para evitar distorsiones, escriba su propio algoritmo de imagen.
Por lo tanto, básicamente no hay ninguna razón para utilizar StretchBlt.
Código fuente adjunto:
//El siguiente es el mapeo de coordenadas establecido
pDC-gt; SetMapMode(MM_ANISOTROPIC); es el modo de mapeo personalizado
pDC-gt; SetWindowOrg(0, 0); //Establece las coordenadas de la esquina superior izquierda de la ventana en
pDC-gt; , 50); / /Establecer métricas de ventana
pDC-gt;SetViewportOrg(0,0);
pDC-gt;SetViewportOrg(0,0);
pDC-gt ; SetViewportExt(rect.right, rect.bottom);
mDC.CreateCompatibleDC(pDC);
//Crea una imagen del DC de la pantalla
CBitmap MemBitmap;
MemBitmap.CreateCompatibleBitmap(pDC);
mDC-gt; SetViewportExt(rect.CreateCompatibleBitmap (pDC, 500, 50); //Tenga en cuenta la configuración de dimensiones de tamaño para el mapa de bits de memoria
//Reserve la memoria anterior y seleccione esta imagen en la memoria DC
CBitmap *pOldBitmap =mDC.SelectObject(pOldBitmap);
//MemBitmap.DeleteObject(); Esta línea no es necesaria, el destructor CBitmap realizará esta operación
.