StretchDIBits 기능을 사용하는 데 문제가 있습니다. 버퍼에서 만든 비트 맵을 그립니다. 그러나 버퍼에서 정의한 색상은 화면의 결과와 다릅니다. 설명서를 읽었으며 BITMAPINFOHEADER의 biCompression (BI_RGB 및 BI_BITFIELDS) 및 biClrUsed (0/3) 매개 변수로 작업했습니다. 나는 그들의 가치에 따라 약간의 차이를 볼 수 있지만, 결과는 내가 기대하는 것과는 여전히 다르다.StretchDIBits를 사용할 때 색이 잘못됨
다음 코드는 내가 사용하고있는 코드입니다 (문제를 설명하기 위해 템플릿 SDI 프로젝트의 OnDraw 메서드에 삽입 할 수 있습니다).
void CTestStretchDIBitsView::OnDraw(CDC* /*pDC*/)
{
...
CClientDC dc(this);
CRect rect;
GetClientRect(&rect);
DWORD* pBuffer = new DWORD[500 * 500];
memset(pBuffer, RGB(255, 255, 0), 500 * 500 * sizeof(DWORD));
LPBITMAPINFO pBmpInfo = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)];
pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBmpInfo->bmiHeader.biWidth = 500;
pBmpInfo->bmiHeader.biHeight = 500;
pBmpInfo->bmiHeader.biPlanes = 1;
pBmpInfo->bmiHeader.biBitCount = 32;
pBmpInfo->bmiHeader.biCompression = BI_BITFIELDS;
pBmpInfo->bmiHeader.biSizeImage = 500 * 500;
pBmpInfo->bmiHeader.biXPelsPerMeter = 0;
pBmpInfo->bmiHeader.biYPelsPerMeter = 0;
pBmpInfo->bmiHeader.biClrUsed = 0;
pBmpInfo->bmiHeader.biClrImportant = 0;
SetStretchBltMode(dc.m_hDC, STRETCH_DELETESCANS);
StretchDIBits(dc.m_hDC,
0,
rect.Height(),
rect.Width(),
-rect.Height(),
0,
0,
500,
500,
pBuffer,
pBmpInfo,
DIB_RGB_COLORS,
SRCCOPY);
delete[] pBmpInfo;
delete[] pBuffer;
}