我在网上找到了c的代码,但由于本人能力有限,关于指针的代码转化不过来,请大虾帮我个忙。以下是代码:
 BOOL TemplateOperation(HWND hWnd, int TemplateType){       DWORD                             OffBits,BufSize; LPBITMAPINFOHEADER    lpImgData;       LPSTR                   lpPtr;       HLOCAL                  hTempImgData;       LPBITMAPINFOHEADER    lpTempImgData;       LPSTR                   lpTempPtr;       HDC                      hDc;       HFILE                  hf;       LONG                  x,y;       float                    coef;  //模板前面所乘的系数       int                         CoefArray[9]; //模板数组       float                     TempNum;       char                     filename[80];       switch(TemplateType){ //判断模板类型       case TEMPLATE_SMOOTH_BOX: //Box平滑模板              coef=(float)(1.0/9.0);              memcpy(CoefArray,Template_Smooth_Box,9*sizeof(int));              strcpy(filename,"c:\\smbox.bmp");               break;       case TEMPLATE_SMOOTH_GAUSS: //高斯平滑模板              coef=(float)(1.0/16.0);              memcpy(CoefArray,Template_Smooth_Gauss,9*sizeof(int));              strcpy(filename,"c:\\smgauss.bmp");              break;       case TEMPLATE_SHARPEN_LAPLACIAN:  //拉普拉斯锐化模板              coef=(float)1.0;              memcpy(CoefArray,Template_Sharpen_Laplacian,9*sizeof(int));              strcpy(filename,"c:\\shlaplac.bmp");              break;       }       OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);       BufSize=OffBits+bi.biHeight*LineBytes;       if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL){            MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|MB_ICONEXCLAMATION);return FALSE;}     lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);           lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);       lpPtr=(char *)lpImgData;       lpTempPtr=(char *)lpTempImgData;//先将原图直接拷贝过来,其实主要是拷贝周围一圈的象素       memcpy(lpTempPtr,lpPtr,BufSize);        for(y=1;y<bi.biHeight-1;y++) //注意y的范围是从1到bi.biHeight-2                     for(x=1;x<bi.biWidth-1;x++){ //注意x的范围是从1到bi.biWidth-2                            lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+x;                            lpTempPtr=(char*)lpTempImgData+(BufSize-LineBytes-y*LineBytes)+x;TempNum=(float)((unsigned char)*(lpPtr+LineBytes-1))*CoefArray[0];                            TempNum+=(float)((unsigned char)*(lpPtr+LineBytes))*CoefArray[1];                            TempNum+=(float)((unsigned char)*(lpPtr+LineBytes+1))*CoefArray[2];                            TempNum+=(float)((unsigned char)*(lpPtr-1))*CoefArray[3];                            TempNum+=(float)((unsigned char)*lpPtr)*CoefArray[4];                            TempNum+=(float)((unsigned char)*(lpPtr+1))*CoefArray[5];                            TempNum+=(float)((unsigned char)*(lpPtr-LineBytes-1))*CoefArray[6];                            TempNum+=(float)((unsigned char)*(lpPtr-LineBytes))*CoefArray[7];                            TempNum+=(float)((unsigned char)*(lpPtr-LineBytes+1))*CoefArray[8];                            //最后乘以系数TempNum*=coef;                            //注意对溢出点的处理                            if(TempNum>255.0) *lpTempPtr=(BYTE)255;                            else if(TempNum<0.0)                                    *lpTempPtr=(unsigned char)fabs(TempNum);                            else *lpTempPtr=(BYTE)TempNum;                     }hDc=GetDC(hWnd);     if(hBitmap!=NULL)           DeleteObject(hBitmap);hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,(LONG)CBM_INIT,(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD),(LPBITMAPINFO)lpTempImgData,DIB_RGB_COLORS);hf=_lcreat(filename,0);        _lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));        _lwrite(hf,(LPSTR)lpTempImgData,BufSize);       _lclose(hf);      ReleaseDC(hWnd,hDc);       LocalUnlock(hTempImgData);       LocalFree(hTempImgData);       GlobalUnlock(hImgData);       return TRUE;}