📄 subject_40052.htm
字号:
<p>
序号:40052 发表者:严丰 发表日期:2003-05-15 14:30:52
<br>主题:请教各位大侠:调整图像两度、对比度、gamma的方法,对象是位图
<br>内容:请教各位大侠:调整图像两度、对比度、gamma的方法,对象是位图。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:michael 回复日期:2003-05-15 15:18:12
<br>内容:/***********************************************************<BR> @ name : AdjustContrast(int iAdjustValue)<BR> <BR> @ function: modify the contrast value of the image being shown <BR><BR> @ in : iAdjustValue: <BR> if pixel's gray value smaller than this<BR> then set it zero<BR> if bigger than this then set it 255<BR> if it between iAdjustValue and 255-iAdjustValue<BR> then conversion it to the proper value<BR><BR> @ out : fail : negitive value returned <BR> success : absloute value returned <BR> <BR> @ modified varibles: m_pImageBufferContrast which receives the result changed<BR> @ called function : ChangeContrast<BR> @ been called by : OnLbuttonDown ...<BR> @ include files : none<BR> @ created date : 01-7-10<BR> @ modified date : <BR>*************************************************************/<BR><BR>void AdjustContrast(int nDelta,<BR> int iCurSpanSelValue,<BR> LPBITMAPINFOHEADER pSrcBmpInfo,<BR> BYTE *pSrcImageData,<BR> BYTE *pDestImageData)<BR>{<BR> int width=pSrcBmpInfo->biWidth;<BR> int height=pSrcBmpInfo->biHeight;<BR> int dep=pSrcBmpInfo->biBitCount/8;<BR><BR> int BytesPerLine = width*dep;<BR> if(BytesPerLine%4!=0)BytesPerLine=(BytesPerLine/4+1)*4;<BR><BR> if( nDelta >= 0 )<BR> {<BR> float fDelta = (float)( 1 + iCurSpanSelValue/100.0 ) ;<BR> fDelta = (float)pow( fDelta , nDelta ) -1 ;<BR> fDelta = fDelta * 255 / 2 ;<BR><BR> if( fDelta > 255/2 )<BR> nDelta = 127;<BR> else nDelta = (int)fDelta ;<BR><BR> int Low=0+nDelta;<BR> int High=255-nDelta;<BR><BR> float Grad=((float)(High-Low))/255;<BR> int temp;<BR> for(int i=0;i<width;i++)<BR> {<BR> for(int j=0;j<height;j++)<BR> {<BR> for(int k=0;k<dep;k++)<BR> {<BR>// iNewValue=(int )(*(pSrcImageData+j*BytesPerLine+(i)*3)* fMultiplier) ;<BR> temp=*(pSrcImageData+j*BytesPerLine+(i)*3+k);<BR> if ( temp<= Low )<BR> *(pDestImageData+j*BytesPerLine+(i)*3+k)=0;<BR> else if( ( Low < temp) && (temp < High) )<BR> *(pDestImageData+j*BytesPerLine+(i)*3+k)=(BYTE)( (temp-Low ) / Grad );<BR> else<BR> *(pDestImageData+j*BytesPerLine+(i)*3+k)=255;<BR> }<BR> }<BR> }<BR> }<BR> else<BR> {<BR> float fDelta = ( 1 + iCurSpanSelValue/100.0f ) ;<BR> fDelta = (float)pow( fDelta , nDelta ) -1 ;<BR> <BR> fDelta = fDelta * 255 / 2 ;<BR><BR> if( fabs( fDelta ) > 255/2 )<BR> nDelta = -127;<BR> else nDelta = (int)fDelta ;<BR><BR> float Grad=255/(255+(float)nDelta + (float)nDelta);<BR><BR> for(int k=0;k<width;k++)<BR> {<BR> for(int l=0;l<height;l++)<BR> {<BR> for(int m=0;m<dep;m++)<BR> *(pDestImageData+l*BytesPerLine+(k)*3+m)=(BYTE)( ( (int)( *(pSrcImageData+l*BytesPerLine+(k)*3+m) / Grad ) )-nDelta );<BR> }<BR> }<BR> }<BR>}<BR>这时调整对比度的代码,至于GAMMA的我也不会而且我问了很多次,每人回答,如果别人告诉你了,请转告我,谢谢。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:严丰 回复日期:2003-05-15 21:37:19
<br>内容:nDelta 和 iCurSpanSelValue分别代表什么啊?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-05-15 22:29:05
<br>内容: nDelta是级数,CurSpanValue是级差,就是说一级调多少。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:严丰 回复日期:2003-05-16 14:48:25
<br>内容:能具体说一下级数和级差的概念吗?你的处理对象是灰度位图吧?如果要是彩色怎么办?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-05-16 15:05:20
<br>内容: 变化量 = 原值*(1+/-级差)^级数
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:严丰 回复日期:2003-05-16 16:23:26
<br>内容:级差&级数的取值范围是多少?有没有专门讲这些东西的文章?谢了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-05-17 11:15:09
<br>内容: 这个程序是可以处理彩图的而且几位的都行。那两个参数主要是为彩扩行业设计的。<BR>他们比较适应这种方法。你可以把这两个参数改成一个固定的变化量,这东西没什麽意义。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:严丰 回复日期:2003-05-17 12:34:11
<br>内容:gamma的调整方法如下:<BR>改变后的数值=(原先数值/255)^(1/n)*255<BR>其中0<=原先数值<=255,n是你要调整的gamma值,一般gamma值都比较小,比如n等于2的时候<BR>原先数值是1的话,改变后的数值就是16了。这个公式你可以看看Charles Petzold的Programming Windows里讲dib那章。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -