图像灰度拉伸

* 函数名称: 
* GrayStrech() 
* 
* 参数: 
* LPSTR  lpDIBBits  -指向原DIB图像的指针 
* LONG  lWidth        -原图像的宽度(像素) 
* LONG  lHeight  -原图像的高度(像素) 
* BYTE  bX1  -灰度拉伸第一个点的X坐标 
* BYTE  bY1  -灰度拉伸第一个点的Y坐标 
* BYTE  bX2  -灰度拉伸第二个点的X坐标 
* BYTE  bY2  -灰度拉伸第二个点的Y坐标 
* 
* 返回值: 
* BOOL    -成功则返回TRUE,否则返回FALSE 
* 
* 说明: 
* 该函数用来对图像进行灰度拉伸,改善输出图像 
* 
*************************************************************************/ 

BOOL WINAPI GrayStrech(LPSTR lpDIBBits,LONG lWidth,LONG lHeight,BYTE bX1, 
        BYTE bY1,BYTE bX2,BYTE bY2) 

unsigned 
char *lpSrc; //指向原图像的指针 
LONG i,j; //循环变量 
BYTE bMap[256];  //灰度映射表 
LONG lLineBytes; //图像每行的字节数 

lLineBytes 
= WIDTHBYTES(lWidth*8); //计算图像每行的字节数 
//计算灰度映射表 
for (i = 0;i <= bX1;i++)
  
//判断bX1是否大于0(防止分母为0) 
  if (bX1 > 0
  
//线性变换 
  bMap[i] = (BYTE) bY1*i/bX1; 
  }
 
  
else 
  
//直接置0 
  bMap[i] = 0
  }
 

}
 
for (;i <= bX2;i++)
  
//判断bX1是否等于bX2(防止分母为0) 
  if (bX2 != bX1) 
  
//线性变换 
  bMap[i] = bY1 + (BYTE)((bY2 - bY1)*(i - bX1)/(bX2 - bX1)); 
  }
 
  
else 
  
//直接置为bY1 
  bMap[1= bY1; 
  }
 
}
 
for (;i < 256;i++
  
//判断bX2是否等于255(防止分母为0) 
  if (bX2 != 255)
  
//线性变换 
  bMap[i] = bY2 + (BYTE)((255 - bY2)*(i - bX2)/(255 - bX2)); 
  }
 
  
else 
  
//直接置为255 
  bMap[i] = 255
  }
 
}
 
//每行 
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]; 
  }
 
}
 

return TRUE; 
}
 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值