procedure BrightnessChange(const SrcBmp,DestBmp:TBitmap;ValueChange:integer); function Min(a, b: integer): integer; begin if a < b then result := a else result := b; end;function Max(a, b: integer): integer; begin if a > b then result := a else result := b; end; var i, j: integer; SrcRGB, DestRGB: pRGBTriple; begin for i := 0 to SrcBmp.Height - 1 do begin SrcRGB := SrcBmp.ScanLine[i]; DestRGB := DestBmp.ScanLine[i]; for j := 0 to SrcBmp.Width - 1 do begin if ValueChange > 0 then begin DestRGB.rgbtRed := Min(255, SrcRGB.rgbtRed + ValueChange); DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + ValueChange); DestRGB.rgbtBlue := Min(255, SrcRGB.rgbtBlue + ValueChange); end else begin DestRGB.rgbtRed := Max(0, SrcRGB.rgbtRed + ValueChange); DestRGB.rgbtGreen := Max(0, SrcRGB.rgbtGreen + ValueChange); DestRGB.rgbtBlue := Max(0, SrcRGB.rgbtBlue + ValueChange); end; Inc(SrcRGB); Inc(DestRGB); end; end; end; 以上程序100%可以通过调试,信誉第一,请楼主结帐!
function Min(a, b: integer): integer;
begin
if a < b then
result := a
else
result := b;
end;function Max(a, b: integer): integer;
begin
if a > b then
result := a
else
result := b;
end;
var
i, j: integer;
SrcRGB, DestRGB: pRGBTriple;
begin
for i := 0 to SrcBmp.Height - 1 do
begin
SrcRGB := SrcBmp.ScanLine[i];
DestRGB := DestBmp.ScanLine[i];
for j := 0 to SrcBmp.Width - 1 do
begin
if ValueChange > 0 then
begin
DestRGB.rgbtRed := Min(255, SrcRGB.rgbtRed + ValueChange);
DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + ValueChange);
DestRGB.rgbtBlue := Min(255, SrcRGB.rgbtBlue + ValueChange);
end else begin
DestRGB.rgbtRed := Max(0, SrcRGB.rgbtRed + ValueChange);
DestRGB.rgbtGreen := Max(0, SrcRGB.rgbtGreen + ValueChange);
DestRGB.rgbtBlue := Max(0, SrcRGB.rgbtBlue + ValueChange);
end;
Inc(SrcRGB);
Inc(DestRGB);
end;
end;
end;
以上程序100%可以通过调试,信誉第一,请楼主结帐!
DestRGB.rgbtGreen := Min(255, SrcRGB.rgbtGreen + ValueChange);
DestRGB.rgbtBlue := Min(255, SrcRGB.rgbtBlue + ValueChange);
有专门的GAMMA调整的,有的显示屏上还有呢。
上面这种算法不是最好的。而且也不光是这种算法。GAMMA值一般是由三个参数组成的。
有的可以不同的颜色乘以不同的参数(因为不同颜色在人眼中的亮度是不一样的)
好的算法是先用3个255数组(将GAMMA化后的数字填入),然后根据原来的rgb查出新的RGB就可以了,比楼上的这位似乎算法稍微好一点。