unit Unit16;
interface
uses windows,Graphics,comctrls;
const
MaxPixelCount = 32768;
type
pRGBArray = ^TRGBArray;
TRGBArray = ARRAY[0..MaxPixelCount-1] OF TRGBTriple;
function Min(a, b: integer): integer;
function Max(a, b: integer): integer;
procedure RGBChange(SrcBmp,DestBmp:Tbitmap;RedChange,GreenChange,
BlueChange:integer);overload;
procedure RGBChange(SrcBmp:Tbitmap;RedChange,GreenChange,BlueChange:integer;
AProgressBar:TProgressBar); overload;
procedure BrightnessChange(SrcBmp,DestBmp:Tbitmap;ValueChange:integer); overload;
procedure BrightnessChange(SrcBmp:Tbitmap;ValueChange:integer;
AProgressBar:TProgressBar); overload;
procedure ContrastChange(SrcBmp,DestBmp:Tbitmap;ValueChange:integer); overload;
procedure ContrastChange(SrcBmp:Tbitmap;ValueChange:integer;
AProgressBar:TProgressBar); overload;
implementation
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;
//rgb色彩
procedure RGBChange(SrcBmp,DestBmp:Tbitmap;RedChange,GreenChange,BlueChange:integer);
var
// R,G,B:integer;
SrcRow, DestRow:pRGBArray;
i,j:integer;
begin
for i := 0 to SrcBmp.Height- 1 do
begin
SrcRow := SrcBmp.ScanLine[i];
DestRow :=DestBmp.ScanLine[i];
for j := 0 to SrcBmp.Width - 1 do
begin
// add brightness value to pixel's RGB values
if RedChange> 0 then
DestRow[j].rgbtRed := Min(255, SrcRow[j].rgbtRed + RedChange)
else
DestRow[j].rgbtRed := Max(0, SrcRow[j].rgbtRed + RedChange);
if GreenChange> 0 then
DestRow[j].rgbtGreen := Min(255, SrcRow[j].rgbtGreen +GreenChange)
else
DestRow[j].rgbtGreen := Max(0, SrcRow[j].rgbtGreen +GreenChange);
if BlueChange> 0 then
DestRow[j].rgbtBlue := Min(255, SrcRow[j].rgbtBlue +BlueChange)
else
DestRow[j].rgbtBlue := Max(0, SrcRow[j].rgbtBlue +BlueChange);
end;
end;
end;
//rgb色彩
procedure RGBChange(SrcBmp:Tbitmap;RedChange,GreenChange,BlueChange:integer;AProgressBar:TProgressBar); overload;
var
// R,G,B:integer;
SrcRow :pRGBArray;
i,j:integer;
begin
AProgressBar.Max:=SrcBmp.Height- 1;
for i := 0 to SrcBmp.Height- 1 do
begin
SrcRow := SrcBmp.ScanLine[i];
// DestRow :=DestBmp.ScanLine[i];
for j := 0 to SrcBmp.Width - 1 do
begin
// add brightness value to pixel's RGB values
if RedChange> 0 then
SrcRow[j].rgbtRed := Min(255, SrcRow[j].rgbtRed + RedChange)
else
SrcRow[j].rgbtRed := Max(0, SrcRow[j].rgbtRed + RedChange);
if GreenChange> 0 then
SrcRow[j].rgbtGreen := Min(255, SrcRow[j].rgbtGreen +GreenChange)
else
SrcRow[j].rgbtGreen := Max(0, SrcRow[j].rgbtGreen +GreenChange);
if BlueChange> 0 then
SrcRow[j].rgbtBlue := Min(255, SrcRow[j].rgbtBlue +BlueChange)
else
interface
uses windows,Graphics,comctrls;
const
MaxPixelCount = 32768;
type
pRGBArray = ^TRGBArray;
TRGBArray = ARRAY[0..MaxPixelCount-1] OF TRGBTriple;
function Min(a, b: integer): integer;
function Max(a, b: integer): integer;
procedure RGBChange(SrcBmp,DestBmp:Tbitmap;RedChange,GreenChange,
BlueChange:integer);overload;
procedure RGBChange(SrcBmp:Tbitmap;RedChange,GreenChange,BlueChange:integer;
AProgressBar:TProgressBar); overload;
procedure BrightnessChange(SrcBmp,DestBmp:Tbitmap;ValueChange:integer); overload;
procedure BrightnessChange(SrcBmp:Tbitmap;ValueChange:integer;
AProgressBar:TProgressBar); overload;
procedure ContrastChange(SrcBmp,DestBmp:Tbitmap;ValueChange:integer); overload;
procedure ContrastChange(SrcBmp:Tbitmap;ValueChange:integer;
AProgressBar:TProgressBar); overload;
implementation
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;
//rgb色彩
procedure RGBChange(SrcBmp,DestBmp:Tbitmap;RedChange,GreenChange,BlueChange:integer);
var
// R,G,B:integer;
SrcRow, DestRow:pRGBArray;
i,j:integer;
begin
for i := 0 to SrcBmp.Height- 1 do
begin
SrcRow := SrcBmp.ScanLine[i];
DestRow :=DestBmp.ScanLine[i];
for j := 0 to SrcBmp.Width - 1 do
begin
// add brightness value to pixel's RGB values
if RedChange> 0 then
DestRow[j].rgbtRed := Min(255, SrcRow[j].rgbtRed + RedChange)
else
DestRow[j].rgbtRed := Max(0, SrcRow[j].rgbtRed + RedChange);
if GreenChange> 0 then
DestRow[j].rgbtGreen := Min(255, SrcRow[j].rgbtGreen +GreenChange)
else
DestRow[j].rgbtGreen := Max(0, SrcRow[j].rgbtGreen +GreenChange);
if BlueChange> 0 then
DestRow[j].rgbtBlue := Min(255, SrcRow[j].rgbtBlue +BlueChange)
else
DestRow[j].rgbtBlue := Max(0, SrcRow[j].rgbtBlue +BlueChange);
end;
end;
end;
//rgb色彩
procedure RGBChange(SrcBmp:Tbitmap;RedChange,GreenChange,BlueChange:integer;AProgressBar:TProgressBar); overload;
var
// R,G,B:integer;
SrcRow :pRGBArray;
i,j:integer;
begin
AProgressBar.Max:=SrcBmp.Height- 1;
for i := 0 to SrcBmp.Height- 1 do
begin
SrcRow := SrcBmp.ScanLine[i];
// DestRow :=DestBmp.ScanLine[i];
for j := 0 to SrcBmp.Width - 1 do
begin
// add brightness value to pixel's RGB values
if RedChange> 0 then
SrcRow[j].rgbtRed := Min(255, SrcRow[j].rgbtRed + RedChange)
else
SrcRow[j].rgbtRed := Max(0, SrcRow[j].rgbtRed + RedChange);
if GreenChange> 0 then
SrcRow[j].rgbtGreen := Min(255, SrcRow[j].rgbtGreen +GreenChange)
else
SrcRow[j].rgbtGreen := Max(0, SrcRow[j].rgbtGreen +GreenChange);
if BlueChange> 0 then
SrcRow[j].rgbtBlue := Min(255, SrcRow[j].rgbtBlue +BlueChange)
else
