VC++数字图像处理编程(14)

时间:2026-01-16   来源:未知    
字号:

return FALSE; // must be a new document

CPalette* pPal = pDoc->m_palDIB;

//调色板的颜色表数据在InitDIBData()函数中实现

if (pPal != NULL)

{

CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;//得到程序的主框架指针;

ASSERT_KINDOF(CMainFrame, pAppFrame);

CClientDC appDC(pAppFrame);//获取主框架的设备上下文;

CPalette* oldPalette = appDC.SelectPalette(pPal, ((HWND)wParam) != m_hWnd);

//只有活动视才可以设为"FALSE",即根据活动视的调色板设为"前景"调色板; if (oldPalette != NULL)

{

UINT nColorsChanged = appDC.RealizePalette();//实现系统调色板 if (nColorsChanged > 0)

pDoc->UpdateAllViews(NULL);//更新视图

appDC.SelectPalette(oldPalette, TRUE);

//将原系统调色板置为背景调色板

}

else

{

TRACE0("\\tSelectPalette failed in");

}

return TRUE;

}

注:在调用API函数显示位图时,不要忘记设置逻辑调色板,即"背景"调色板,否则位图将无法正确显示,读者可以从后面的显示部分的实现看出我们在显示时实现了逻辑调色板。上述的处理相对来说比较繁琐复杂,可能对于初学者来说也比较难于理解,所以如果我们的程序仅仅限于处理灰度图象,可以采用另外一种相对简单的办法,即在文档类的初始化阶段定义一个灰度调色板,然后在设备上下文中实现它,这样作的好处是在度取灰度位图时可以不再考虑文件中的颜色表信息,提高了文件读取速度,笔者在开发一个基于机器视觉的项目时采用的就是这种方法,取的了比较满意的效果。首先定义一个指向逻辑颜色表结构 LOGPALETTE的指针pPal,填充该指针,然后将该指针与调色板指针联系起来,该方法的具体实现如下:

/////////////////////////////////////////////////////////

CDibDoc::CDibDoc()

{

............................

LOGPALETTE *Pal;

Pal=new LOGPALETTE;

VC++数字图像处理编程(14).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)