将Bmp图导到资源中,然后CBBitmap::LoadBitmap()加进来,最简单的办法
解决方案 »
- _afxThreadState是什么意思!
- 关于双缓冲问题。
- 哪位大侠给我讲讲BITMAP,BITMAPINFOHEADER,PBITMAPINFO,HBITMAP,BITMAPFILEHEADER这些东西之间有什么关系?分不够再开贴
- ::::::::帮忙阿
- 用VC7.0怎么设置编译参数,就可以编译出64位的Dll了?
- 怎样将HBITMAP或CBitmap中的bmp图片扩大十倍?
- 怎样在mfc应用程序中使用directx??急!!
- 高分相送!!!!!!!关于JPEG在DirectX中的应用.
- 如何改变ToolBar的背景色?
- 如何写出可得到一个数组全部排列组合的程序?谢谢您!!!
- 请问在ListCtrl里添加了图片,怎样保留checkbox
- vc能直接编译utf8的源代码么?
2、然后把BMP的四部分一部分一部分打开,前面两个头信息包括一些对你后续有用的数据,最后的图像数据部分就是我们进行图像处理真正的数据!
3、图像读进来以后,可以自己做一下显示函数(如:StretchDIBits),就可以显示了!
个人觉得打开BMP是图像处理的基础,即使用了别人的程序,最好自己也要看懂,这样既可以了解BMP的结构有利于图像处理,而且对编程提高也有用!
#define VIDEOHEIGHT 600
#define VIDEOWIDTH 800BITMAPINFO bitInfo;
BITMAPFILEHEADER bitFile;
BYTE ImgBuf[VIDEOWIDTH*VIDEOHEIGHT*3];
BYTE ImgBuf_temp[VIDEOWIDTH*VIDEOHEIGHT*3];#define bheight bitInfo.bmiHeader.biHeight
#define bwidth bitInfo.bmiHeader.biWidth
(2)初始化
bitInfo.bmiHeader.biBitCount = 24;
bitInfo.bmiHeader.biClrImportant = 0;
bitInfo.bmiHeader.biClrUsed = 0;
bitInfo.bmiHeader.biCompression = BI_RGB;
bitInfo.bmiHeader.biHeight = VIDEOHEIGHT;
bitInfo.bmiHeader.biWidth = VIDEOWIDTH;
bitInfo.bmiHeader.biPlanes = 1;
bitInfo.bmiHeader.biSize = 40;
bitInfo.bmiHeader.biSizeImage = VIDEOWIDTH*VIDEOHEIGHT*3;
bitInfo.bmiHeader.biXPelsPerMeter = VIDEOWIDTH;
bitInfo.bmiHeader.biYPelsPerMeter = VIDEOHEIGHT;(3)在你的消息响应里的代码 CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,
"BMP(*.bmp)|*.bmp||",NULL);
if(dlg.DoModal() == IDOK)
pathName = dlg.GetPathName();
CFile f;
f.Open(pathName , CFile::modeRead , NULL);
f.Read(&bitFile,sizeof(BITMAPFILEHEADER));
f.Read(&bitInfo,sizeof(BITMAPINFOHEADER));
f.Read(ImgBuf,bwidth*bheight*3);
memcpy(ImgBuf_temp,ImgBuf,bwidth*bheight*3); CDC MemDC;
CBitmap bitmap;
CClientDC dc(this); bitmap.CreateCompatibleBitmap(&dc,bwidth,bheight);
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&bitmap);
SetStretchBltMode(MemDC.m_hDC,BLACKONWHITE);//COLORONCOLOR);
StretchDIBits(MemDC.m_hDC,0,0,bwidth,bheight,
0,0,bwidth,bheight,ImgBuf,&bitInfo,DIB_RGB_COLORS,SRCCOPY); dc.BitBlt(0,0,bwidth,bheight,&MemDC,0,0,SRCCOPY); MemDC.DeleteDC();