中易网

求教:我是超级菜鸟,想问问各位高手,用VC++6.0处理图像的时候建立什么类型的工程和文件,建立以后怎么做

答案:4  悬赏:30  
解决时间 2021-04-28 20:00
  • 提问者网友:独菊痴梦
  • 2021-04-28 02:49
然后就是将要处理的图片如何调入,如果有图像处理算法源码,该怎么做?能给我来个具体的实例最好带图,急用 谢谢各位高手!我的邮箱[email protected]

高手请进 急用 不知道的别来酱油 谢谢!没功夫闲聊
最佳答案
  • 二级知识专家网友:抱不住太阳的深海
  • 2021-04-28 03:56
原则上任何cpp文件都可以处理图像的,只不过看你把打开图像文件的句柄放在什么位置上
例如:文件-〉新建-〉工程-〉MFC AppWizard.EXE-〉起个工程名字,我选择aaa,然后点下一步-〉选择单文档或者双重文档都可以,看你的需求,接下来同样如此,直接选择默认也可。然后会自动建立几个文件,比如CAaaView类,CAaaApp类,CAaaDoc类,CMainframe类等等,主要看你头几步的选择,然后会出现源文件有aaa.cpp, aaa.rc, aaaDoc.cpp, aaaView.cpp, MainFrm.cpp, StdAfx.cpp,对应的头文件就是上面的名字,后缀是.h的,不过aaa.rc对应的是Resource.h文件,这个存储的是菜单。好了完成这一步,许多代码都自动填充进相应的文件了。
aaa.cpp一般来讲,程序运行的时候,就是先运行它,然后完成各类窗体的初始化,不过代码一般不放在这里。
把打开图像的过程放在aaaDoc.cpp中的CAaaDoc::OnNewDocument()中(这个是自动定义好的)
CFile file; //CFile类
CFileException fe;
// 打开文件
if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))
{
// 失败
ReportSaveLoadException(lpszPathName, &fe,
FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
// 返回FALSE
return FALSE;
}
BITMAPFILEHEADER bmfHeader; //BMP文件头
DWORD dwBitsSize;
HDIB hDIB;
LPSTR pDIB;
// 获取DIB(文件)长度(字节)
dwBitsSize = file.GetLength();
// 尝试读取DIB文件头
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
{
// 大小不对,返回NULL。
return NULL;
}
// 判断是否是DIB对象,检查头两个字节是否是"BM"
if (bmfHeader.bfType != DIB_HEADER_MARKER)
{
// 非DIB对象,返回NULL。
return NULL;
}
// 为DIB分配内存,这里hDIB就是打开BMP文件并读取数据到内存中的句柄了,任何修改不通过它是不行的
hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
if (hDIB == 0)
{
// 内存分配失败,返回NULL。
return NULL;
}
// 锁定 pDIB是返回该句柄的指针
pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 读象素
if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
dwBitsSize - sizeof(BITMAPFILEHEADER) )
{
// 大小不对。
// 解除锁定
::GlobalUnlock((HGLOBAL) hDIB);
// 释放内存
::GlobalFree((HGLOBAL) hDIB);
// 返回NULL。
return NULL;
}
// 解除锁定
::GlobalUnlock((HGLOBAL) hDIB);
// 返回DIB句柄
return hDIB;
就是这些语句,不过,这些读取DIB位图有专门的一个函数库,你可以直接添加这些文件就行了
有 DIBAPI.CPP DIBAPI.h你自己上网上搜索就有下载。不是源代码,切误复制运行。
上面把图像读到内存中,返回句柄hDIB,然后呢你需要在
aaaView::OnDraw(CDC* pDC) 里面继续添加代码,好把内存中的图像显示出来,这里也需要用到DIBAPI.CPP里面的函数,要不自己编,可是太麻烦了。我给你列出这些函数吧,自己看看就知道了。
// ************************************************************************
// 文件名:dibapi.cpp
//
// DIB(Independent Bitmap) API函数库:
//
// PaintDIB() - 绘制DIB对象
// CreateDIBPalette() - 创建DIB对象调色板
// FindDIBBits() - 返回DIB图像象素起始位置
// DIBWidth() - 返回DIB宽度
// DIBHeight() - 返回DIB高度
// PaletteSize() - 返回DIB调色板大小
// DIBNumColors() - 计算DIB调色板颜色数目
// CopyHandle() - 拷贝内存块
//
// SaveDIB() - 将DIB保存到指定文件中
// ReadDIBFile() - 重指定文件中读取DIB对象
//
// DIBToPCX256() - 将指定的256色DIB对象保存为256色PCX文件
// ReadPCX256() - 读取256色PCX文件
//
// ************************************************************************
全部回答
  • 1楼网友:为你轻狂半世殇
  • 2021-04-28 05:04

visual c++ 6.0不仅是一个c++编译器,而且是一个基于windows操作系统的可视化集成开发环境。

不过你要是想过计算机2级的话不建议学c++,学vb会让你容易通过计算机2级,如果你只为了考证的话。

  • 2楼网友:温柔刺客
  • 2021-04-28 04:22
如果是MFC的话,从下方选择第二个标签,单击工程点右键选择impor然后t选择图片,不过必须图片是bmp格式的,
  • 3楼网友:丢不掉的轻狂
  • 2021-04-28 04:13
我有一些图像处理的代码 发到你的邮箱了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息