eVC下,载入一张位图,变换后输出显示的问题

strcat 2005-03-24 05:36:28
用文件操作的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);
}

恳请哪位高手指点迷津!!
...全文
69 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
红牛哥110 2005-03-29
  • 打赏
  • 举报
回复
我以前用的是一个像素点一个像素点进行旋转,速度慢又有点失真,后来我放弃了...呵呵
无聊客 2005-03-25
  • 打赏
  • 举报
回复
BYTE * pDataBmp = new BYTE[bih.biSizeImage];
BYTE* pDataScreen = NULL;
ReadFile(hSrc, pDataBmp, sizeof(bih.biSizeImage), &dwReaded, NULL);
HBITMAP hBitmap = CreateDIBSection(hdc, &bi, DIB_RGB_COLORS, (VOID **)&pDataScreen, NULL, 0);

memcpy(pDataScreen, pDataBmp, ....);
bitblt....

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧