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

时间:2025-04-30

m_sizeDoc.y=bmhdr->biHeight;

//下面是根据颜色表生成调色板;

m_palDIB=new Cpalette;

pPal->palVersion=0x300;//填充逻辑颜色表

pPal->palNumEntries=256;

lpbmi=(LPBITMAPINFO)bmhdr;

for(int i=0;i<256;i++)

{//每个颜色表项的R、G、B值相等,并且各个值从"0"到"255"序列展开; Pal->palPalentry[i].peRed=lpbmi->bmiColors[i].rgbRed;

pPal->palPalentry[i].peGreen=lpbmi->bmiColors[i].rgbGreen;

pPal->palPalentry[i].peBlue= lpbmi->bmiColors[i].rgbBlue;;

pPal->palPalentry[i].peFlags=0;

}

m_palDIB->CreatePalette(pPal);

//根据读入的数据得到位图的宽、高、颜色表;

if(pPal)

delete pPal;

EndWaitCursor();

SetPathName(lpszPathName);//设置存储路径

SetModifiedFlag(FALSE); // 设置文件修改标志为FALSE

return TRUE;

}

上面的方法是通过CFile类对象的操作来读取位图文件的,它需要分析位图中的文件头信息,从而确定需要读取的图像长度。这种方法相对来说有些繁琐,其实还可以以一种相对简单的方法读取位图数据,首先在程序的资源中定义DIB类型资源,然后添加位图到该类型中,将图像数据以资源的形式读取出来,这时候就可以根据所获取的数据中的位图信息结构来获取、显示图像数据了。下面的函数实现了以资源形式装载图像文件数据,该函数的实现代码如下所示:

///////////////////////////////////////////////////////////////// HANDLE LoadDIB(UINT uIDS, LPCSTR lpszDibType)

{

LPCSTR lpszDibRes =MAKEINTRESOURCE(uIDS);//根据资源标志符确定资源的名字;

HINSTANCE hInst=AfxGetInstanceHandle();//得到应用程序的句柄;

HRSRC hRes=::FindResource(hInst,lpszDibRes, lpszDibType);//获取资源的句柄,这里lpszDibType为资源的名字"DIB";

If(hRes==NULL)

return NULL

HGLOBAL hData=::LoadResource(hInst, hRes);//转载资源数据并返回该句柄; return hData;

}

VC++数字图像处理编程(10).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219