2017-07-24 5 views
1

S'il vous plaît, jetez un oeil au code suivant:CImage :: Draw() dessine une image noire

// Create an empty bitmap BRGA 
CImage segImage; 
HDC hSeg = CreateCompatibleDC(NULL); 
SelectObject(hSeg, segImage); 

int width = 640; 
int height = 480; 
segImage.Create(width, height, 32, CImage::createAlphaChannel); 

// Fill it from a byte array (the size is height * width * 4) 
int lineSize = width * 4; 
for (int y = 0; y < height; y++) 
{ 
    void*  dst = segImage.GetPixelAddress(0, y); 
    const void* src = segmented_image_data.planes[0] + y * segmented_image_data.pitches[0]; 
    memcpy(dst, src, lineSize); 
} 

// inspecting segImage shows the actual image content 

// create the destination image (resized) 
CImage resImage; 
HDC hRes = CreateCompatibleDC(NULL); 
SelectObject(hRes, resImage); 

int resWidth = 320; 
int resHeight = 240; 

resImage.Create(resWidth, resHeight, 32, CImage::createAlphaChannel); 
segImage.Draw(hRes, 0, 0, resWidth, resHeight); 

// inspecting resImage shows only 0x00 

segImage.Destroy(); 
resImage.Destroy(); 

Je sais mémoire DC par défaut crée des bitmaps monocrome, mais je pensais que l'utilisation de la méthode passant Create() 32- bpp était assez.

Qu'est-ce qui ne va pas dans mon code?

Répondre

0

Vous sélectionnez resImage dans le contexte du périphérique avant de le créer. Par conséquent, la tentative de tirage ne le change pas. Vous devez réorganiser les méthodes comme ceci:

resImage.Create(resWidth, resHeight, 32, CImage::createAlphaChannel); 
SelectObject(hRes, resImage);