菜鸟问题,BMP位图怎么转成灰度图?

l5050500 2012-07-17 08:24:19
以下程序是网上拷的,不知道怎么用,放进VC里出现
C:\Users\Administrator\Desktop\ImageDeal\BmpToGray.cpp(8) : warning C4518: 'void ' : storage-class or type specifier(s) unexpected here; ignored
C:\Users\Administrator\Desktop\ImageDeal\BmpToGray.cpp(8) : error C2146: syntax error : missing ';' before identifier 'Convert256toGray'
C:\Users\Administrator\Desktop\ImageDeal\BmpToGray.cpp(8) : fatal error C1004: unexpected end of file found
这3个错误,请大神指点,QQ277877973,急求!!!!!

#include "stdafx.h"
#include "cdib.h"
#include "BmpToGray.h"
#define HDIB HANDLE


void Convert256toGray(HDIB hDIB)
{
LPSTR lpDIB;

// 由DIB句柄得到DIB指针并锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);
//LPSTR lpDIB=(LPSTR)pDib->m_lpBMIH
// 指向DIB象素数据区的指针
LPSTR lpDIBBits;
// 指向DIB象素的指针
BYTE * lpSrc;
// 图像宽度
LONG lWidth;
// 图像高度
LONG lHeight;

// 图像每行的字节数
LONG lLineBytes;

// 指向BITMAPINFO结构的指针(Win3.0)
LPBITMAPINFO lpbmi;

// 指向BITMAPCOREINFO结构的指针
LPBITMAPCOREINFO lpbmc;

// 获取指向BITMAPINFO结构的指针(Win3.0)
lpbmi = (LPBITMAPINFO)lpDIB;

// 获取指向BITMAPCOREINFO结构的指针
lpbmc = (LPBITMAPCOREINFO)lpDIB;

// 灰度映射表
BYTE bMap[256];

// 计算灰度映射表(保存各个颜色的灰度值),并更新DIB调色板
int i,j;
for (i = 0; i < 256; i ++)
{
// 计算该颜色对应的灰度值
bMap[i] = (BYTE)(0.299 * lpbmi->bmiColors[i].rgbRed +

0.587 * lpbmi->bmiColors[i].rgbGreen +

0.114 * lpbmi->bmiColors[i].rgbBlue + 0.5);
// 更新DIB调色板红色分量
lpbmi->bmiColors[i].rgbRed = i;

// 更新DIB调色板绿色分量
lpbmi->bmiColors[i].rgbGreen = i;

// 更新DIB调色板蓝色分量
lpbmi->bmiColors[i].rgbBlue = i;

// 更新DIB调色板保留位
lpbmi->bmiColors[i].rgbReserved = 0;

}
// 找到DIB图像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);

// 获取图像宽度
lWidth = ::DIBWidth(lpDIB);

// 获取图像高度
lHeight = ::DIBHeight(lpDIB);

// 计算图像每行的字节数
lLineBytes = WIDTHBYTES(lWidth * 8);

// 更换每个象素的颜色索引(即按照灰度映射表换成灰度值)

//逐行扫描
for(i = 0; i < lHeight; i++)
{

//逐列扫描
for(j = 0; j < lWidth; j++)
{
// 指向DIB第i行,第j个象素的指针
lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;

// 变换
*lpSrc = bMap[*lpSrc];
}
}

//解除锁定
::GlobalUnlock ((HGLOBAL)hDIB);
}
...全文
160 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
l5050500 2012-07-18
  • 打赏
  • 举报
回复
你的代码我看了,里面那段彩色图转到黑白的代码对我这个功能没什么用,我要用到灰度图去提取图像边缘,里面的边缘检测代码都是基于灰度图的,但还是很谢谢这位大哥。如果方便加下我的QQ交流下
whucv 2012-07-17
  • 打赏
  • 举报
回复
我写的CImage图像处理类代码
下载地址http://download.csdn.net/detail/whucv/4194200
博客http://blog.csdn.net/whucv/article/details/7420617
void toBinary(unsigned char *lpSrc,int nwidth,int nheight,int nthread);
unsigned char* BinToRgb(unsigned char *lpSrc, int nWidth, int nHeight);
unsigned char* RgbToBin(unsigned char *lpSrc, int nWidth, int nHeight); 这几个函数为彩色到黑白变换代码。可以参考。
直接在程序中添加头文件。CImage image,然后调用image的成员函数进行处理即可。
l5050500 2012-07-17
  • 打赏
  • 举报
回复
大神们,小弟坐等回复。。。。有木有

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧