eVC下,载入一张位图,变换后输出显示的问题
用文件操作的API函数读入位图数据,将其变换(如旋转90度)后显示,但是结果是黑色的方块,代码如下:
// 为简便表示,我是直接读取文件内容,没有变换而直接显示
void RolBitmap(HDC hdc)
{
// 打开位图文件
HANDLE hSrc = CreateFile(TEXT("\\pp\\1.bmp"), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (NULL == hSrc)
{
MessageBox(hwndMain, TEXT("Failed opening the file!"), TEXT("Error"), MB_ICONERROR);
return;
}
// 读取位图信息
BITMAPFILEHEADER bfh;
BITMAPINFO bi;
BITMAPINFOHEADER bih;
DWORD dwReaded;
ReadFile(hSrc, &bfh, sizeof(BITMAPFILEHEADER), &dwReaded, NULL);
ReadFile(hSrc, &bih, sizeof(BITMAPINFOHEADER), &dwReaded, NULL);
// 故意弄的24位位图,所以没有调色板
CopyMemory(&bi.bmiHeader, &bih, sizeof(BITMAPINFOHEADER));
// 生成位图数据
BYTE * pDataBmp = new BYTE[bih.biSizeImage];
ReadFile(hSrc, pDataBmp, sizeof(bih.biSizeImage), &dwReaded, NULL);
HBITMAP hBitmap = CreateDIBSection(hdc, &bi, DIB_RGB_COLORS, (VOID **)&pDataBmp, NULL, 0);
HDC hdcMem = CreateCompatibleDC(hdc);
HANDLE hOldSel = SelectObject(hdcMem, hBitmap);
BitBlt(hdc, 0, 0, bih.biWidth, bih.biHeight, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, hOldSel);
DeleteDC(hdcMem);
}
恳请哪位高手指点迷津!!