以下程序是网上拷的,不知道怎么用,放进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);  
}  

解决方案 »

  1.   

    我写的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的成员函数进行处理即可。