首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 通用的图像模板操作函数
【标  题】:通用的图像模板操作函数
【关键字】:
【来  源】:http://blog.csdn.net/yang1994/archive/2007/01/25/1492805.aspx

通用的图像模板操作函数

 需要只想图像象素的指针以及图像的高宽信息,变换模板的信息,包括模板到小信息,模板稀疏,模板元素数组和模板中心元素的位置信息。

/*************************************************************************
 * 函数名称:
 *   Template()
 * 参数:
 *   LPSTR lpDIBBits    - 指向源DIB图像指针
 *   LONG  lWidth       - 源图像宽度(象素数)
 *   LONG  lHeight      - 源图像高度(象素数)
 *   int   iTempH  - 模板的高度
 *   int   iTempW  - 模板的宽度
 *   int   iTempMX  - 模板的中心元素X坐标 ( < iTempW - 1)
 *   int   iTempMY  - 模板的中心元素Y坐标 ( < iTempH - 1)
 *  FLOAT * fpArray - 指向模板数组的指针
 *  FLOAT fCoef  - 模板系数
 * 返回值:
 *   BOOL               - 成功返回TRUE,否则返回FALSE。
 * 说明:
 *   该函数用指定的模板(任意大小)来对图像进行操作,参数iTempH指定模板
 * 的高度,参数iTempW指定模板的宽度,参数iTempMX和iTempMY指定模板的中心
 * 元素坐标,参数fpArray指定模板元素,fCoef指定系数。
 ************************************************************************/

BOOL Bmp::Template(u8_t **lpDIBBits, LONG lWidth, LONG lHeight, int iTempH, int iTempW, int iTempMX, int iTempMY, FLOAT * fpArray, FLOAT fCoef){
 
 u8_t **lpNewDIBBits;  // 指向复制图像的指针
 u8_t* lpSrc;          // 指向源图像的指针 
 u8_t* lpDst;          // 指向要复制区域的指针 
 LONG i,j,k,l;   // 循环变量 
 FLOAT fResult;   // 计算结果
  
 u32_t lLineBytes;   // 图像每行的字节数
 lLineBytes = WIDTHBYTES(lWidth * 8);

 // 暂时分配内存,以保存新图像
    lpNewDIBBits = (u8_t **)malloc((u32_t)lLineBytes*lHeight*10);


 // 初始化图像为原始图像
 memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);
  
 for(i = iTempMY; i < lHeight - iTempH + iTempMY + 1; i++) // 行(除去边缘几行)
 {  
  for(j = iTempMX; j < lWidth - iTempW + iTempMX + 1; j++)// 列(除去边缘几列)
  {
   // 指向新DIB第i行,第j个象素的指针
   lpDst = (u8_t *)lpNewDIBBits + lLineBytes * (lHeight - 1 - i) + j;
   
   fResult = 0;

   for (k = 0; k < iTempH; k++)
   {
    for (l = 0; l < iTempW; l++)
    {
     // 指向DIB第i - iTempMY + k行,第j - iTempMX + l个象素的指针
     lpSrc = (u8_t *)lpDIBBits + lLineBytes * (lHeight - 1
      - i + iTempMY - k) + j - iTempMX + l;
     
     // 保存象素值
     fResult += (* lpSrc) * fpArray[k * iTempW + l];
    }
   }
      
   fResult *= fCoef;     // 乘上系数   
   fResult = (FLOAT ) fabs(fResult); // 取绝对值
   if(fResult > 255)
   {
    * lpDst = 255;
   }
   else
   {
    * lpDst = (unsigned char) (fResult + 0.5);
   }   
  }
 }
 
 // 复制变换后的图像
 memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);

    free(lpNewDIBBits);
 
 return TRUE;
}

 

高斯处理:【上一篇】
对24图的灰度图的生成:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • SGI STL V3.2 源码剖析笔记-1. 空间配置器
  • 修炼一名程序员的职业水准 [转]
  • EVC编程经验点滴(二)
  • 复杂检索数据并分页显示的处理方法
  • 双向STB接入NAS
  • XQuery表达式之序列类型表达式(Expressions on SequenceTypes)
  • 统一界面设计
  • Word文档打开后显示为乱码的处理
  • Quick Report V4.05 FS For D2005 专业版
  • ASP遗留的二十大积习
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.