因为在调用子程序的时候亮度和对比度都已经确定,那么B = B -127 * A +127这一步就可以放在循环的外面先作好。从而减少了程序的运算时间。
下面给出我的程序,以供参考:
Public Sub BrightnessAndContrast(ByVal RedOffset As Long, ByVal GreenOffset As Long, ByVal BlueOffset As Long, Optional ByVal RedContrast As Single = 1, Optional ByVal GreenContrast As Single = 1, Optional ByVal BlueContrast As Single = 1) Dim X As Long Dim Y As Long Dim MidR As Integer Dim MidG As Integer Dim MidB As Integer Dim Max As Long On Error GoTo ErrLine Done = False TimeFilter = timeGetTime MidR = RedOffset - 127 * (RedContrast - 1) '计算新的位移量B MidG = GreenOffset - 127 * (GreenContrast - 1) MidB = BlueOffset - 127 * (BlueContrast - 1) Max = 255 For X = 0 To OutPutWid For Y = 0 To OutPutHei R = ColOut(2, X, Y) G = ColOut(1, X, Y) B = ColOut(0, X, Y) R = R * RedContrast + MidR '计算Y = X * A + B G = G * GreenContrast + MidG B = B * BlueContrast + MidB If R > Max Then R = Max '输出值判断是否在0到255之间 If R < 0 Then R = 0 If G > Max Then G = Max If G < 0 Then G = 0 If B > Max Then B = Max If B < 0 Then B = 0 ColOut(2, X, Y) = R ColOut(1, X, Y) = G ColOut(0, X, Y) = B Next Next Done = True TimeFilter = timeGetTime - TimeFilter Exit Sub ErrLine: MsgBox Err.Description Done = True End Sub 因为在亮度对比度的过程中会出现计算值超出(0,255)的范围,因此需要对它做一个判断,把结果限定在这个范围之内。