| if I<=sbMin.Position then BarData[I]:=0 else if I>=sbMax.Position then BarData[I]:=255 else BarData[I]:=Round(255/(sbMax.Position-sbMin.Position)*(I-sbMin.Position)); end; DrawBar; pbBarPaint(pbBar); Button1Click(Button1); end; 四、变为黑白图片 在使用第三个功能的时候,你会发现当b<=a时,图像上的颜色除了黑色就是白色。这样操作的好处是不能直接显示出来的。这只要到了比较高级的图像处理如边缘检测等,才有作用。本例可以拿第三种方法的公式再变形,因此不作详细阐述。 五、指数级亮度调整 我们假设这个图的定义域是[0,1],值域也是[0,1]。那么,定义函数f(x)=x^c,则f(x)的图像有一段如上图。我们再用鼠标操作时,可以在上面取一点P(a,b),然后使f(x)通过点P,则c=ln(b)/ln(a)。有了c之后,我们就可以对颜色进行操作了: New=(Old/255)^c*255=exp(ln(old/255)*c)*255 var ea,eb,ec:Extended; I:Integer; begin ea:=A/255; eb:=B/255; ec:=Ln(eb)/Ln(ea); for I:=1 to 255 do BarData[I]:=Round(Exp(Ln((I/255))*ec)*255); DrawBar; pbBarPaint(pbBar); Button1Click(Button1); end; 这样做可以调节图像的亮度。 先到这里,在下一篇文章中,我会向大家整理出彩色图像亮度调整的方法。 示例程序:http://vczh.cstc.net.cn/vczh/Article/A_Files/Gray256.rar 打开后按右键弹菜单
上一页 [1] [2] [3] |