WEB开发网
开发学院软件开发VC 用Visua C++6.0为图像增加彩色滤镜 阅读

用Visua C++6.0为图像增加彩色滤镜

 2008-11-14 19:36:00 来源:WEB开发网   
核心提示: 下面我们以256级灰度图"angel.bmp"为例,给出用VC++ 6.0编写的主要步骤和关键函数,用Visua C++6.0为图像增加彩色滤镜(2),程序在PC机的Windows 2000 环境中调试通过,并取得了良好的色彩效果,图 1单击主界面中"彩色编码

下面我们以256级灰度图"angel.bmp"为例,给出用VC++ 6.0编写的主要步骤和关键函数,程序在PC机的Windows 2000 环境中调试通过,并取得了良好的色彩效果。

(1)建立主界面

在VC的MFC Appwizard向导下建立一个single document型的工程,其中CFunnyView的基类为CformView,修改菜单属性,如图1的主界面。

用Visua C++6.0为图像增加彩色滤镜

图 1

单击主界面中"彩色编码"菜单时,执行的函数:

void CFunnyGlassView::OnEnhaColor()
{
// TODO: Add your command handler code here
// 伪彩色编码
// 获取文档
CFunnyGlassDoc* pDoc = GetDocument();
int nColor; // 保存用户选择的伪彩色编码表索引
LPSTR lpDIB; // 指向DIB的指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB()); // 锁定DIB
// 判断是否是8-bpp位图(只处理256色位图的伪彩色变换,其它的可以类推)
CDlgColor dlgPara; // 参数对话框
// 初始化变量值
if (pDoc->m_nColorIndex >= 0)
{
// 初始选中当前的伪彩色
dlgPara.m_nColor = pDoc->m_nColorIndex;
}
else
{
// 初始选中灰度伪彩色编码表
dlgPara.m_nColor = 0;
}
// 指向名称数组的指针
dlgPara.m_lpColorName = (LPSTR) ColorScaleName;
// 伪彩色编码数目
dlgPara.m_nColorCount = COLOR_SCALE_COUNT;
// 名称字符串长度
dlgPara.m_nNameLen = sizeof(ColorScaleName) / COLOR_SCALE_COUNT;
// 显示对话框,提示用户设定平移量
if (dlgPara.DoModal() != IDOK)
{
return; // 返回
}
nColor = dlgPara.m_nColor; // 获取用户的设定
delete dlgPara; // 删除对话框
BeginWaitCursor(); // 更改光标形状
// 判断伪彩色编码是否改动
if (pDoc->m_nColorIndex != nColor)
{
// 调用ReplaceColorPal()函数变换调色板
::ReplaceColorPal(lpDIB, (BYTE*) ColorsTable[nColor]);
pDoc->GetDocPalette()->SetPaletteEntries(0, 256, (LPPALETTEENTRY) ColorsTable [nColor]);
// 替换当前文档调色板
pDoc->m_nColorIndex = nColor; // 更新类成员变量
// 设置脏标记 pDoc->SetModifiedFlag(TRUE);
OnDoRealize((WPARAM)m_hWnd,0); // 实现新的调色板
pDoc->UpdateAllViews(NULL); // 更新视图
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());// 解除锁定
EndWaitCursor(); // 恢复光标
}

Tags:Visua 图像 增加

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接