Je souhaite créer une fonction de recadrage dans un moteur existant. Voilà ce que je l'ai déjà:Fonction Crop BitBlt (...)
bool Bitmap::Crop(RECT cropArea)
{
BITMAP bm;
GetObject(m_Handle, sizeof(bm), &bm);
HDC hSrc = CreateCompatibleDC(NULL);
SelectObject(hSrc, m_Handle);
HDC hNew = CreateCompatibleDC(NULL);
HBITMAP hBmp = CreateCompatibleBitmap(hNew, bm.bmWidth, bm.bmHeight);
HBITMAP hOld = (HBITMAP)SelectObject(hNew, hBmp);
BitBlt(hNew, 0, 0, bm.bmWidth, bm.bmHeight, hSrc, 0, 0, SRCCOPY);
SelectObject(hNew, hOld);
DeleteDC(hSrc);
DeleteDC(hNew);
DeleteObject(m_Handle);
m_Handle = hBmp;
}
Je veux simplement copier l'image entière à un nouveau HBITMAP et remplacer l'ancien avec elle. Donc je sais que ça fonctionne. Après cela, il joue juste avec les paramètres BitBlt.
m_Handle est un HBITMAP de la classe Bitmap.
Le résultat de ce code est juste un écran noir.
Hmm, ne fonctionne pas. Je pense que cela a quelque chose à voir avec ma création des HDC. – Kazoeja
La création de DC semble OK pour moi. Vous devriez vérifier les valeurs de retour de tout, en particulier le 'SelectObject's. –
Que devrait être 'hNew'? – Acidic