Contrast.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:3k
源码类别:

图形图象

开发平台:

Visual C++

  1. /********************************************************************
  2. Contrast.cpp - ISee图像浏览器—图像处理模块图像亮度,对比度调节
  3. 内部处理函数实现代码文件
  4.     版权所有(C) VCHelp-coPathway-ISee workgroup 2000 all member's
  5.     这一程序是自由软件,你可以遵照自由软件基金会出版的GNU 通用许可证
  6. 条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根据你
  7. 的选择)用任何更新的版本。
  8.     发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定
  9. 目地的隐含的担保。更详细的情况请参阅GNU通用许可证。
  10.     你应该已经和程序一起收到一份GNU通用许可证(GPL)的副本。如果还没有,
  11. 写信给:
  12.     The Free Software Foundation, Inc.,  675  Mass Ave,  Cambridge,
  13.     MA02139,  USA
  14. 如果你在使用本软件时有什么问题或建议,用以下地址可以与我们取得联
  15. 系:
  16. http://isee.126.com
  17. http://www.vchelp.net
  18. 或:
  19. iseesoft@china.com
  20. 作者:马翔
  21.    e-mail:hugesoft@yeah.net
  22.    功能实现:亮度,对比度调节内部实现函数
  23. 文件版本:
  24. Build 000123
  25. Date  2000-12-3
  26. ********************************************************************/
  27. #include "stdafx.h"
  28. #include "Contrast.h"
  29. // 亮度调节内部处理函数
  30. void _fnSPE_ChangeBrightness(int iDelta,BYTE *pRed,BYTE *pGrn,BYTE *pBlu)
  31. {
  32. int iRed=*pRed+iDelta;
  33. int iGrn=*pGrn+iDelta;
  34. int iBlu=*pBlu+iDelta;
  35. // 些处代码用于确保调整后的RGB值在0~255之间
  36. *pRed=(BYTE)((iRed)<(0)?(0):((iRed)>(255)?(255):(iRed)));
  37. *pGrn=(BYTE)((iGrn)<(0)?(0):((iGrn)>(255)?(255):(iGrn)));
  38. *pBlu=(BYTE)((iBlu)<(0)?(0):((iBlu)>(255)?(255):(iBlu)));
  39. }
  40. // 对比度调节内部处理函数
  41. void _fnSPE_ChangeContrast(int nDelta,BYTE *pRed,BYTE *pGrn,BYTE *pBlu)
  42. {
  43. // 依据增量的正负分别调用不同函数进行处理
  44. if(nDelta>=0)
  45. {
  46. int Low=0+nDelta;
  47. int High=255-nDelta;
  48. float Grad=((float)(High-Low))/255;
  49. _fnSPE_IncreaseContrast(pRed,Low,High,Grad);
  50. _fnSPE_IncreaseContrast(pGrn,Low,High,Grad);
  51. _fnSPE_IncreaseContrast(pBlu,Low,High,Grad);
  52. }
  53. else
  54. {
  55. float Grad=255/(255+(float)nDelta+(float)nDelta);
  56. _fnSPE_DecreaseContrast(pRed,nDelta,Grad);
  57. _fnSPE_DecreaseContrast(pGrn,nDelta,Grad);
  58. _fnSPE_DecreaseContrast(pBlu,nDelta,Grad);
  59. }
  60. }
  61. // 对比度调节增量为正时内部处理函数
  62. void _fnSPE_IncreaseContrast(BYTE *pByte,const int Low,const int High,const float Grad)
  63. {
  64. if (*pByte<=Low)
  65. *pByte=0;
  66. else if((Low<*pByte)&&(*pByte<High))
  67. *pByte=(BYTE)((*pByte-Low)/Grad);
  68. else
  69. *pByte=255;
  70. }
  71. // 对比度调节增量为负时内部处理函数
  72. void _fnSPE_DecreaseContrast(BYTE *pByte,const int Level,const float Grad)
  73. {
  74. ASSERT(pByte);
  75. ASSERT(Grad!=0.0);
  76. *pByte=(BYTE)(((int)(*pByte/Grad))-Level);
  77. }