图象数据读取显示问题 我得到一幅图片后,然后把图象信息存于BITMAP结构中,我是否可以从结构中读取每个像素点的值然后存在数组中,然后按像素点一个一个点画到屏幕上,请给我些提示参考,谢谢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BITMAP的bmBits成员是图像数据。SetPixel画点 StretchDIBits函数,写在view类里 将BMP文件加载到resourse里,取名为ID_MYBITMAP.然后在OnDraw函数里CDC MemDC; //定义内存设备文本对象CBitmap bm; //定义CBitmap对象bm.LoadBitmap(IDB_MYBITMAP); //装载位图资源MemDC.CreateCompatibleDC(pDC);//创建内存设备文本对象MemDC.SelectObject(&bm);//将位图选入内存设备文本对象BITMAP tmp;bm.GetBitmap(&tmp); //获得位图参数pDC->BitBlt(20,20,tmp.bmWidth,tmp.bmHeight,&MemDC,0,0,SRCCOPY);bm.DeleteObject();就可以显示了。 画上去是可以但是必须按照BMP图像的格式才能把图像正确的显示出来。 我把图像数据都取出来了,但是想新建一个文档,把图像重新画回去,显示出问题!我用的周长发的《精通visual C++图像处理》一书中的CDib类void CViewDIBDoc::OnScree() { // TODO: Add your command handler code here //新建文档 int count=0; CString strTitle=""; strTitle.Format("Window %d",count++); CDocTemplate *pDocTemp=NULL; CViewDIBDoc* pDoc=NULL; pDocTemp=GetDocTemplate(); ASSERT_VALID(pDocTemp); pDoc=(CViewDIBDoc*)pDocTemp->CreateNewDocument(); pDoc->SetTitle(strTitle); LPBITMAPINFOHEADER lpbi; pDoc->m_pDib->m_hDib = CreateDefaultDIB(320,160);//新建DIB,并把所有像素都置白色 lpbi=(LPBITMAPINFOHEADER)GlobalLock(pDoc->m_pDib->m_hDib); pDoc->m_pDib->Create((LPBYTE)lpbi); CFrameWnd* pFrame=pDocTemp->CreateNewFrame(pDoc,NULL); pDocTemp->InitialUpdateFrame(pFrame,pDoc); } 不论怎么修改像素的值,总是显示黑色 可以实现了,把所有点SetPixel到内存dc后,内存dc中的图象要比客户区大,该怎么调整内存dc图象的大小 内存DC图象你就找下缩放的函数了.不过,你直接保存这个大的不可以吗?显示BITMAP,再存BITMAP,应该没什么问题口啊. MFC中如何判定CString中是否有中文和特殊字符 MFC项目类型中,windows资源管理器和MFC标准有什么区别? 获取主机名和IP地址出错?? CImageList,怎么样贴出这种效果? 有关于窗口拖动的问题!在线等!! 哪里有vc的补丁下载,非常非常非常感谢,我很着急的,为什么没有人回答? 重载OnClose和OnDestroy后我的程序不能关闭了! 请教列表控件的问题 我的程序出现了内存泄露的问题,我该怎样把它找出来,一头雾水! 在CSplitterWnd中,当切分条移动时,有什么消息,在哪里处理? 如何阅读vnc源代码 谁知道哪有GPS过滤算法?
SetPixel画点
CDC MemDC; //定义内存设备文本对象
CBitmap bm; //定义CBitmap对象
bm.LoadBitmap(IDB_MYBITMAP); //装载位图资源
MemDC.CreateCompatibleDC(pDC);//创建内存设备文本对象
MemDC.SelectObject(&bm);//将位图选入内存设备文本对象
BITMAP tmp;
bm.GetBitmap(&tmp); //获得位图参数
pDC->BitBlt(20,20,tmp.bmWidth,tmp.bmHeight,&MemDC,0,0,SRCCOPY);
bm.DeleteObject();
就可以显示了。
我用的周长发的《精通visual C++图像处理》一书中的CDib类
void CViewDIBDoc::OnScree()
{
// TODO: Add your command handler code here
//新建文档
int count=0;
CString strTitle="";
strTitle.Format("Window %d",count++); CDocTemplate *pDocTemp=NULL;
CViewDIBDoc* pDoc=NULL;
pDocTemp=GetDocTemplate();
ASSERT_VALID(pDocTemp);
pDoc=(CViewDIBDoc*)pDocTemp->CreateNewDocument();
pDoc->SetTitle(strTitle);
LPBITMAPINFOHEADER lpbi;
pDoc->m_pDib->m_hDib = CreateDefaultDIB(320,160);//新建DIB,并把所有像素都置白色
lpbi=(LPBITMAPINFOHEADER)GlobalLock(pDoc->m_pDib->m_hDib);
pDoc->m_pDib->Create((LPBYTE)lpbi);
CFrameWnd* pFrame=pDocTemp->CreateNewFrame(pDoc,NULL);
pDocTemp->InitialUpdateFrame(pFrame,pDoc);
} 不论怎么修改像素的值,总是显示黑色