2010-11-17 2 views
0

Dans l'extrait de code ci-dessous, j'essaie de récupérer les valeurs RVB d'un pixel dans Visual C++, puis de rétablir les mêmes valeurs RVB. même pixel. c'est-à-dire que c'est juste un test. Cependant quand je le fais l'image résultante est semblable mais les couleurs sont fausses/off. L'image résultante semble manquer totalement les pixels de couleur jaune de l'image originale. Pourquoi est-ce que je ne récupère pas la même image après ça? Toute aide sera très appréciée. MerciObtention d'une valeur RVB à partir d'un pixel et définition des valeurs rgb sur le même pixel

 BYTE *pbBitmap; 
    HBITMAP hDestBitmap = CreateDIBSection(memDC1, &bi, DIB_RGB_COLORS,(void**)&pbBitmap, NULL, 0); 

    if (hDestBitmap){ 
     SelectObject(DestDC2, hDestBitmap); 
     BitBlt(DestDC2, 0, 0, nX, nY, memDC1, 0, 0, SRCCOPY); 

     RGBQUAD *pRGB; 
     LONG nPixels; 
     for (pRGB = (RGBQUAD *)pbBitmap, nPixels = (nX * nY); nPixels > 0; ++pRGB, --nPixels){ 
      ULONG* pSrc =(ULONG*)pRGB; 
      ULONG nRed = GetRValue(*pSrc); 
      ULONG nGreen = GetGValue(*pSrc); 
      ULONG nBlue = GetBValue(*pSrc); 

      pRGB->rgbRed=nRed; 
      pRGB->rgbGreen=nGreen; 
      pRGB->rgbBlue=nBlue; 
     } 

     CRect rctPicture2; 
     m_Picture2.GetWindowRect(&rctPicture2); 
     ScreenToClient(&rctPicture2); 
     dc.SetStretchBltMode(COLORONCOLOR); 
     StretchBlt(dc,rctPicture2.left,rctPicture2.top,rctPicture2.Width(),rctPicture2.Height(),DestDC2,0,0,1152,864,SRCCOPY); 
    } 

Répondre

3

La façon dont vous accédez aux valeurs de couleur est erroné. GetRValue et d'autres fonctions sont destinés à fonctionner sur une valeur COLORREF qui est présentée dans la mémoire comme red-green-blue-reserved, alors que le format d'un RGBQUAD est blue-green-red-reserved. En utilisant les macros Get?Value sur un RGBQUAD, vous permutez les canaux rouge et bleu.

Questions connexes