www.pudn.com > isee_code01231.zip > Contrast.cpp


/******************************************************************** 
 
	Contrast.cpp - ISee图像浏览器—图像处理模块图像亮度,对比度调节 
	内部处理函数实现代码文件 
 
    版权所有(C) VCHelp-coPathway-ISee workgroup 2000 all member's 
 
    这一程序是自由软件,你可以遵照自由软件基金会出版的GNU 通用许可证 
	条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根据你 
	的选择)用任何更新的版本。 
 
    发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定 
	目地的隐含的担保。更详细的情况请参阅GNU通用许可证。 
 
    你应该已经和程序一起收到一份GNU通用许可证(GPL)的副本。如果还没有, 
	写信给: 
    The Free Software Foundation, Inc.,  675  Mass Ave,  Cambridge, 
    MA02139,  USA 
 
	如果你在使用本软件时有什么问题或建议,用以下地址可以与我们取得联 
	系: 
		http://isee.126.com 
		http://www.vchelp.net 
	或: 
		iseesoft@china.com 
 
	作者:马翔 
   e-mail:hugesoft@yeah.net 
 
   功能实现:亮度,对比度调节内部实现函数 
 
	文件版本: 
		Build 000123 
		Date  2000-12-3 
 
********************************************************************/ 
#include "stdafx.h" 
#include "Contrast.h" 
 
//	亮度调节内部处理函数 
void _fnSPE_ChangeBrightness(int iDelta,BYTE *pRed,BYTE *pGrn,BYTE *pBlu) 
{ 
	int iRed=*pRed+iDelta; 
	int iGrn=*pGrn+iDelta; 
	int iBlu=*pBlu+iDelta; 
 
	//	些处代码用于确保调整后的RGB值在0~255之间 
	*pRed=(BYTE)((iRed)<(0)?(0):((iRed)>(255)?(255):(iRed))); 
	*pGrn=(BYTE)((iGrn)<(0)?(0):((iGrn)>(255)?(255):(iGrn))); 
	*pBlu=(BYTE)((iBlu)<(0)?(0):((iBlu)>(255)?(255):(iBlu))); 
} 
 
//	对比度调节内部处理函数 
void _fnSPE_ChangeContrast(int nDelta,BYTE *pRed,BYTE *pGrn,BYTE *pBlu) 
{ 
	//	依据增量的正负分别调用不同函数进行处理 
	if(nDelta>=0) 
	{ 
		int Low=0+nDelta; 
		int High=255-nDelta; 
		float Grad=((float)(High-Low))/255; 
		_fnSPE_IncreaseContrast(pRed,Low,High,Grad); 
		_fnSPE_IncreaseContrast(pGrn,Low,High,Grad); 
		_fnSPE_IncreaseContrast(pBlu,Low,High,Grad); 
	} 
	else 
	{ 
		float Grad=255/(255+(float)nDelta+(float)nDelta); 
		_fnSPE_DecreaseContrast(pRed,nDelta,Grad); 
		_fnSPE_DecreaseContrast(pGrn,nDelta,Grad); 
		_fnSPE_DecreaseContrast(pBlu,nDelta,Grad); 
	} 
} 
 
//	对比度调节增量为正时内部处理函数 
void _fnSPE_IncreaseContrast(BYTE *pByte,const int Low,const int High,const float Grad) 
{ 
	if (*pByte<=Low) 
		*pByte=0; 
	else if((Low<*pByte)&&(*pByte