C/Visual C - BITMAP en Visual C++

 
Vista:

BITMAP en Visual C++

Publicado por Mari (8 intervenciones) el 11/10/2001 19:24:59
Hola, estoy intentando capturar un bitmap desde un recurso y pegarlo a un documento. El codigo es este:OnDraw (CDC* pDC)
{
CDC* pDisplayMemDC = new CDC;
Cbitmap* pBitmap = new Cbitmap;
PBitmap->LoadBitmap(IDB_LEAVES);
PDisplayMemDC->CreateCompatibleDC(pDC);
Cbitmap* pOldBitmap = (Cbitmap*)
PDisplayMemDC->SelectObject (pBitmap);
PDC-> BitBlt (100,100,200,150, pDisplayMemDC, 0, 0, SRCCOPY);
Delete pDisplayMemDC->SelectObject (pOldBitmap);
Delete pDisplayMemDC;
}
me da error en CDC y CBitmap, aparte de más pero no lo entiendo, en la aplicacion trabajo con el manejador HDC.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Captura de un bitmap desde recursos y pegar en un documento

Publicado por Alejandro (913 intervenciones) el 16/10/2024 22:35:13
Mary, parece que tienes algunos errores en tu código, especialmente en la forma en que estás manejando los objetos de `CDC` y `CBitmap`. Aquí hay una versión corregida y mejorada de tu código para capturar un bitmap desde un recurso y pegarlo en un documento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void CYourView::OnDraw(CDC* pDC)
{
    // Crear un objeto CDC para el bitmap
    CDC displayMemDC;
    displayMemDC.CreateCompatibleDC(pDC);
 
    // Cargar el bitmap desde los recursos
    CBitmap bitmap;
    bitmap.LoadBitmap(IDB_LEAVES);
 
    // Seleccionar el bitmap en el DC de memoria
    CBitmap* pOldBitmap = displayMemDC.SelectObject(&bitmap);
 
    // Realizar la copia del bitmap en el DC de destino
    pDC->BitBlt(100, 100, 200, 150, &displayMemDC, 0, 0, SRCCOPY);
 
    // Restaurar el bitmap original
    displayMemDC.SelectObject(pOldBitmap);
}

Correcciones y mejoras



1. Uso de `CDC` y `CBitmap`: En lugar de usar punteros y `new`, se utilizan objetos automáticos. Esto evita problemas de memoria y hace que el código sea más limpio.

2. Creación de `CDC`: Se utiliza `CDC displayMemDC;` en lugar de `new CDC;`, lo que simplifica la gestión de memoria.

3. Selección de bitmap: Se selecciona el bitmap en el `CDC` de memoria y se restaura después de usarlo.

4. Eliminación de objetos: No es necesario eliminar `CDC` y `CBitmap` manualmente si se utilizan objetos automáticos.

Notas adicionales



- Asegúrate de que `IDB_LEAVES` esté definido correctamente en tus recursos.
- Verifica que el tamaño del bitmap (200x150 en este caso) sea adecuado para el bitmap que estás utilizando.
- Si sigues teniendo problemas, asegúrate de que tu proyecto esté configurado correctamente para usar MFC y que hayas incluido los encabezados necesarios (`afxwin.h`).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar