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);
그러하다.
 
댓글 없음:
댓글 쓰기