求助:毕业设计 好象CDib类,没有统一自定义建议用两个HDIB,得到各自指向hdib内存块的指针这就好办了,移动指针挨个像素比 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你一段代码: // 获取文档 CCh1_1Doc* pDoc = GetDocument(); // 指向DIB的指针 LPSTR lpDIB,lpTemplateDIB; // 指向DIB象素指针 LPSTR lpDIBBits,lpTemplateDIBBits; //图像的宽度与高度 long lWidth,lHeight; //模板的宽度与高度 long lTemplateWidth,lTemplateHeight; HDIB hTemplateDIB; // 锁定DIB lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB()); // 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推) if (::DIBNumColors(lpDIB) != 256) { // 提示用户 MessageBox("目前只支持256色位图的平移!", "系统提示" , MB_ICONINFORMATION | MB_OK); // 解除锁定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光标形状 BeginWaitCursor(); // 找到DIB图像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); lWidth = ::DIBWidth(lpDIB); lHeight = ::DIBHeight(lpDIB); CFileDialog dlg(TRUE,"bmp","*.bmp"); if(dlg.DoModal() == IDOK) { CFile file; CFileException fe; CString strPathName; strPathName = dlg.GetPathName(); // 打开文件 VERIFY(file.Open(strPathName, CFile::modeRead | CFile::shareDenyWrite, &fe)); // 尝试调用ReadDIBFile()读取图像 TRY { hTemplateDIB = ::ReadDIBFile(file); } CATCH (CFileException, eLoad) { // 读取失败 file.Abort(); // 恢复光标形状 EndWaitCursor(); // 报告失败 //ReportSaveLoadException(strPathName, eLoad,// FALSE, AFX_IDP_FAILED_TO_OPEN_DOC); // 设置DIB为空 hTemplateDIB = NULL; // 返回 return; } END_CATCH // 初始化DIB //InitDIBData(); // 判断读取文件是否成功 if (hTemplateDIB == NULL) { // 失败,可能非BMP格式 CString strMsg; strMsg = "读取图像时出错!可能是不支持该类型的图像文件!"; // 提示出错 MessageBox(strMsg, NULL, MB_ICONINFORMATION | MB_OK); // 恢复光标形状 EndWaitCursor(); // 返回 return; } } else { // 恢复光标形状 EndWaitCursor(); return; } // 锁定DIB lpTemplateDIB = (LPSTR) ::GlobalLock((HGLOBAL) hTemplateDIB); // 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的模板匹配,其它的可以类推) if (::DIBNumColors(lpTemplateDIB) != 256) { // 提示用户 MessageBox("目前只支持256色位图!", "系统提示" , MB_ICONINFORMATION | MB_OK); // 解除锁定 ::GlobalUnlock((HGLOBAL) hTemplateDIB); // 返回 return; } // 更改光标形状 BeginWaitCursor(); // 找到DIB图像象素起始位置 lpTemplateDIBBits = ::FindDIBBits(lpTemplateDIB); lTemplateWidth = ::DIBWidth(lpTemplateDIB); lTemplateHeight = ::DIBHeight(lpTemplateDIB); if(lTemplateHeight > lHeight || lTemplateWidth > lWidth ) { // 提示用户 MessageBox("模板尺寸大于源图像尺寸!", "系统提示" , MB_ICONINFORMATION | MB_OK); // 解除锁定 ::GlobalUnlock((HGLOBAL) hTemplateDIB); // 返回 return; } // 调用TemplateMatchDIB()函数进行模板匹配 if (TemplateMatchDIB(lpDIBBits,lpTemplateDIBBits, lWidth,lHeight, lTemplateWidth,lTemplateHeight)) { // 设置脏标记 pDoc->SetModifiedFlag(TRUE); // 更新视图 pDoc->UpdateAllViews(NULL); } else { // 提示用户 MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK); } // 解除锁定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); ::GlobalUnlock((HGLOBAL) hTemplateDIB); // 恢复光标 EndWaitCursor(); 是一个样卡(没有填涂的)一个填涂的学生卡进行比较提取出学生的准考证号和题号及选项形成文本文件或是存在数组里,传给数据库,与其中的正确的信息相比较,得出最后的得分。老师规定用CDIB类 双缓冲贴图,欢迎帮忙改错 [急切求助]如何向QQ聊天窗体粘贴文本,并向"发送"按纽发送单击消息? 怎么自动登录QQ ? 在Windows API中,怎么自动打开文件夹 关于vector的这段代码什么意思 输出信息中内存泄露怎么看? ace里面TCP连接断开的识别问题 还是一些文字处理问题 gdi+ 链接出错的问题 切分窗口怎样才能让他的大小不可移动? 大家好!小弟有个关于sql的小问题? 改变鼠标形状用什么函数???
// 获取文档
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指针
LPSTR lpDIB,lpTemplateDIB; // 指向DIB象素指针
LPSTR lpDIBBits,lpTemplateDIBBits;
//图像的宽度与高度
long lWidth,lHeight; //模板的宽度与高度
long lTemplateWidth,lTemplateHeight; HDIB hTemplateDIB; // 锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用户
MessageBox("目前只支持256色位图的平移!", "系统提示" , MB_ICONINFORMATION | MB_OK); // 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光标形状
BeginWaitCursor(); // 找到DIB图像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
lWidth = ::DIBWidth(lpDIB);
lHeight = ::DIBHeight(lpDIB);
CFileDialog dlg(TRUE,"bmp","*.bmp");
if(dlg.DoModal() == IDOK)
{
CFile file;
CFileException fe;
CString strPathName;
strPathName = dlg.GetPathName();
// 打开文件
VERIFY(file.Open(strPathName, CFile::modeRead | CFile::shareDenyWrite, &fe)); // 尝试调用ReadDIBFile()读取图像
TRY
{
hTemplateDIB = ::ReadDIBFile(file);
}
CATCH (CFileException, eLoad)
{
// 读取失败
file.Abort();
// 恢复光标形状
EndWaitCursor();
// 报告失败
//ReportSaveLoadException(strPathName, eLoad,
// FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
// 设置DIB为空
hTemplateDIB = NULL;
// 返回
return;
}
END_CATCH
// 初始化DIB
//InitDIBData();
// 判断读取文件是否成功
if (hTemplateDIB == NULL)
{
// 失败,可能非BMP格式
CString strMsg;
strMsg = "读取图像时出错!可能是不支持该类型的图像文件!";
// 提示出错
MessageBox(strMsg, NULL, MB_ICONINFORMATION | MB_OK);
// 恢复光标形状
EndWaitCursor();
// 返回
return;
}
}
else
{
// 恢复光标形状
EndWaitCursor(); return;
}
// 锁定DIB
lpTemplateDIB = (LPSTR) ::GlobalLock((HGLOBAL) hTemplateDIB);
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的模板匹配,其它的可以类推)
if (::DIBNumColors(lpTemplateDIB) != 256)
{
// 提示用户
MessageBox("目前只支持256色位图!", "系统提示" , MB_ICONINFORMATION | MB_OK); // 解除锁定
::GlobalUnlock((HGLOBAL) hTemplateDIB);
// 返回
return;
}
// 更改光标形状
BeginWaitCursor(); // 找到DIB图像象素起始位置
lpTemplateDIBBits = ::FindDIBBits(lpTemplateDIB);
lTemplateWidth = ::DIBWidth(lpTemplateDIB);
lTemplateHeight = ::DIBHeight(lpTemplateDIB);
if(lTemplateHeight > lHeight || lTemplateWidth > lWidth )
{
// 提示用户
MessageBox("模板尺寸大于源图像尺寸!", "系统提示" , MB_ICONINFORMATION | MB_OK); // 解除锁定
::GlobalUnlock((HGLOBAL) hTemplateDIB);
// 返回
return; }
// 调用TemplateMatchDIB()函数进行模板匹配
if (TemplateMatchDIB(lpDIBBits,lpTemplateDIBBits, lWidth,lHeight, lTemplateWidth,lTemplateHeight))
{
// 设置脏标记
pDoc->SetModifiedFlag(TRUE); // 更新视图
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用户
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
::GlobalUnlock((HGLOBAL) hTemplateDIB); // 恢复光标
EndWaitCursor();
一个填涂的学生卡进行比较提取出学生的准考证号和题号及选项形成文本文件或是存在数组里,传给数据库,与其中的正确的信息相比较,得出最后的得分。
老师规定用CDIB类