Cómo escalar la imagen e ingresarla en cdc
1. Quiero usar un CDC para escalar la imagen original e ingresarla en un objeto Bitmap, y luego cargarla en memDC.DrawState() para mostrarla.
CDC VdcMem ; //Crea un CDC, utilizado para recibir la imagen original y ampliarla
VdcMem.CreateCompatibleDC(&memDC); //Crea un CDC compatible con la ventana del cliente memDC
VdcMem; .SelectObject(hBitmap); //Selecciona el objeto de mapa de bits original en CDC
memDC.SetStretchBltMode(HALFTONE); //Establece el modo de conversión de color del mapa de bits
memDC.StretchBlt(0, 0,300,1000,&VdcMem ,0,0,image_size.cx,image_size.cy,SRCCOPY);//Ampliar y mostrar En este punto, la imagen escalada se ha mostrado en el área del cliente.
Puede an. Se utilizará el CDC intermedio para ejecutar la operación final de escalado en un solo paso (esto significa escalar en la memoria), luego lo cargará en un nuevo objeto de mapa de bits temporal, extraerá su información HBITMAP como el tercer parámetro de DrawState(), ¿cómo implementarlo?
2. Cree un nuevo objeto de mapa de bits, escale la imagen original en la memoria y luego obtenga el HBITMAP del nuevo mapa de bits
CBitmap hbmp
HBITMAP; hbitmap;
CDC dcMemory
dcMemory.CreateCompatibleDC(&dc);
CBitmap bm; , 1000);
CBitmap* pOldBitmap = dcMemory.SelectObject(&bm);
memDC.DrawState(point,image_size,hBitmap,DST_BITMAP ?DSS_NORMAL);
En realidad, la clave es cómo escalar la imagen y generarla a través de DrawState() sin destruir la imagen original.
No sé si hay una función en la clase CBitmap para escalar directamente la imagen y asignarla a la nueva de objetos CBitmap
.