var
x,y,i,j:integer;
Bitmap1,Bitmap2:TBitmap;
pixcolo1,pixcolo2:PByteArray;
begin
Bitmap1:=TBitmap.Create;
Bitmap2:=TBitmap.Create;
try
Bitmap1.LoadFromFile('D:\chemical.bmp');//将同一幅图像装入两个TBitmap实例
Bitmap2.LoadFromFile('D:\chemical.bmp');
Bitmap1.pixelFormat:=pf24bit;
Bitmap2.pixelFormat:=pf24bit;
for y:=0 to Bitmap2.height-1 do
begin
pixcolo2:=Bitmap2.Scanline[y];
for x:=0 to Bitmap2.Width*3-1 do
pixcolo2[x]:=0;//先将要处理的图像的像素颜色值设为0
end;
for i:=0 to 255 do
begin
for y:=0 to Bitmap2.Height-1 do
begin
pixcolo2:=Bitmap2.Scanline[y];
pixcolo1:=Bitmap1.Scanline[y];
for x:=0 to Bitmap2.Width*3-1 do
if pixcolo2[x]<pixcolo1[x] then
pixcolo2[x]:=(pixcolo2[x]+1);
end;//与原始图的像素颜色值比较,并递增其值直到与原始图相等
Image1.Canvas.Draw(0,0,Bitmap2);
Application.ProcessMessages;
end;
finally
Bitmap1.free
end;
===================================================================
说说我自己的想法,我想用move函数把图像数据移动到 DataR :Pchar;这种类型变量里面.,我自己搞不定总抱错,却又不知道怎么写
x,y,i,j:integer;
Bitmap1,Bitmap2:TBitmap;
pixcolo1,pixcolo2:PByteArray;
begin
Bitmap1:=TBitmap.Create;
Bitmap2:=TBitmap.Create;
try
Bitmap1.LoadFromFile('D:\chemical.bmp');//将同一幅图像装入两个TBitmap实例
Bitmap2.LoadFromFile('D:\chemical.bmp');
Bitmap1.pixelFormat:=pf24bit;
Bitmap2.pixelFormat:=pf24bit;
for y:=0 to Bitmap2.height-1 do
begin
pixcolo2:=Bitmap2.Scanline[y];
for x:=0 to Bitmap2.Width*3-1 do
pixcolo2[x]:=0;//先将要处理的图像的像素颜色值设为0
end;
for i:=0 to 255 do
begin
for y:=0 to Bitmap2.Height-1 do
begin
pixcolo2:=Bitmap2.Scanline[y];
pixcolo1:=Bitmap1.Scanline[y];
for x:=0 to Bitmap2.Width*3-1 do
if pixcolo2[x]<pixcolo1[x] then
pixcolo2[x]:=(pixcolo2[x]+1);
end;//与原始图的像素颜色值比较,并递增其值直到与原始图相等
Image1.Canvas.Draw(0,0,Bitmap2);
Application.ProcessMessages;
end;
finally
Bitmap1.free
end;
===================================================================
说说我自己的想法,我想用move函数把图像数据移动到 DataR :Pchar;这种类型变量里面.,我自己搞不定总抱错,却又不知道怎么写
pixcolo2[x]:=(pixcolo2[x]+1); //就把颜色值中的R,G,B分别+1
循环了255次,得到的结果 使颜色值和图片的颜色值一样,改成这样
var
y : integer;
Sour,Dest:TBitmap;
pSour , pDest : PChar;
begin
Sour := TBitmap.Create;
Dest := TBitmap.Create;
try
Sour.LoadFromFile('D:\chemical.bmp');//将同一幅图像装入两个TBitmap实例
Dest.Width := Sour.Width;
Dest.Height := Sour.Height;
Sour.pixelFormat:=pf24bit;
Sour.pixelFormat:=pf24bit;
for y:=0 to Sour.height-1 do begin
pSour := Sour.Scanline[y];
pDest := Dest.Scanline[y];
Move(pSour^ , pDest^ , Sour.Width*3);
Image1.Canvas.Draw(0,0,Dest);
finally
Sour.free;
Dest.Free; //Dest也需要释放
end;
end;
Dest.pixelFormat:=pf24bit;//修改
for y:=0 to Sour.height-1 do begin
pSour := Sour.Scanline[y];
pDest := Dest.Scanline[y];
Move(pSour^ , pDest^ , Sour.Width*3);
end;//增加
Image1.Canvas.Draw(0,0,Dest);
finally
......