ContrastwithColorMatrix.value*0.01f//maxTrackbarValue=100,minTrackbarValue=-100floatt=0.01f;cmPicture=newColorMatrix(newfloat[][]{newfloat[]{c,0,0,0,0},newfloat[]{0,c,0,0,0},newfloat[]{0,0,c,0,0},newfloat[]{0,0,0,1,0},newfloat[]{t,t,t,0,1}});但结果却大不相同。我尝试更改~c~中的0.01f和~t~值中的0.01f,但它只给出亮度等结果。(例如:c=mytrackbar.value*0.04f)我想知道~c~&~t~我应该用来创建对比度的值以及最大和最小范围更新@NicoprivatevoidmyTrackBar_ValueChanged(objectsender,EventArgse){imageHandle=imageHandleTemp.Bitmap;myNumericUpDown.Text=myTrackBar.Value.ToString();浮动值=myTrackBar.Value*0.01f;位图bmpInverted=newBitmap(imageHandle.Width,imageHandle.Height);ImageAttributesia=newImageAttributes();ColorMatrixcmPicture=newColorMatrix();浮动c=值;浮动t=0.01f;cmPicture=newColorMatrix(newfloat[][]{newfloat[]{c,0,0,0,0},newfloat[]{0,c,0,0,0},newfloat[]{0,0,c,0,0},newfloat[]{0,0,0,1,0},newfloat[]{t,t,t,0,1}});ia.SetColorMatrix(cmPicture);图形g=Graphics.FromImage(bmpInverted);g.DrawImage(imageHandle,newRectangle(0,0,imageHandle.Width,imageHandle.Height),0,0,imageHandle.Width,imageHandle.Height,GraphicsUnit.Pixel,ia);g.处置();图像myImage=新图像(bmpInv已注册);imageBoxCamera.Image=myImage;t值必须从新的对比度值c中导出,因此更改它的任务如下:floatt=(1.0f-c)/2.0f;根据ColorMatrix指南上的这个不错的链接,matrix其余代码似乎没问题。注意:我对c的范围是错误的!!c的值不是绝对值,而是应该应用的一个因数!所以要使对比度加倍,它应该是2f。注2:您的代码不清楚来源和目的地;并且由于您正在使用轨迹栏动态更改对比度,因此应该清楚Nico对c=1+值的建议;在将更改应用到+100之前,原始范围-100可以正常工作,初始值为0,系数为0.01f。这里有一些关于该过程背后的数学的进一步解释。如果您要接受答案,请接受TaW的答案,他比我快。调整对比度基本上如下:它将所有像素值移动-0.5(使中灰为0)它对所有像素值应用一个因子它恢复偏移所以在一个公式中:newValue=factor*(oldValue-0.5)+0.5=factor*oldValue-factor*0.5+0.5=factor*oldValue+0.5*(1-factor)对于单通道图像,我们可以将其转换为矩阵乘法:(newValue,1)=(oldValue,1)*/factor,0对于多通道图像,2x2矩阵变为5x5(四通道+w通道用于平移)矩阵,c和t位于您指定的位置。请记住,因子1不会改变任何东西。系数0使整个图像呈现中性灰色。所以你可能要调整你的c计算:以上是C#学习教程的全部内容:对比颜色矩阵。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---c=1+value;t=0.5f*(1.0f-c);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
