g_hWnd = <윈도우 핸들>
g_pTexture = <Direct3D>
...
HRESULT hr;
// D3DXSaveTextureToFileInMemory를 이용하여, Memory상에 BMP로 저장하고 그것을 이용한다.
LPD3DXBUFFER pBuffer = NULL;
hr = D3DXSaveTextureToFileInMemory(&pBuffer, D3DXIFF_BMP, g_pTexture, NULL);
// 헤더를 읽고
BITMAPFILEHEADER *pHeader = (BITMAPFILEHEADER*)pBuffer->GetBufferPointer();
BITMAPINFOHEADER *pInfo = (BITMAPINFOHEADER*)((BYTE*)pBuffer->GetBufferPointer() + sizeof(BITMAPFILEHEADER));
BITMAPINFO bmpInfo;
memset(&bmpInfo, 0, sizeof(bmpInfo));
bmpInfo.bmiHeader = *pInfo;
void *pData = (void*)((BYTE*)pBuffer->GetBufferPointer() + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));
// 동일한 DIBSECTION을 만든다.
HDC hDC = GetDC(g_hWnd);
HDC hMemDC = CreateCompatibleDC(hDC);
BYTE *pPixel = NULL;
HBITMAP hMemDCBitmap = CreateDIBSection(hMemDC,&bmpInfo, DIB_RGB_COLORS, (void**)&pPixel, NULL, 0);
SelectObject(hMemDC, hMemDCBitmap);
// BITMAP의 내용을 복사
memcpy(pPixel , pData, pInfo->biWidth*pInfo->biHeight*pInfo->biBitCount/ 8);
pBuffer->Release();
// GDI 화면에 BitBlt로 복사하여 그리기
BitBlt(hDC, 0, 0, pInfo->biWidth, pInfo->biHeight, hMemDC, 0, 0, SRCCOPY);
// DIBSection 제거
DeleteDC(hMemDC);
DeleteObject(hMemDCBitmap);
그러하다.
댓글 없음:
댓글 쓰기