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;这种类型变量里面.,我自己搞不定总抱错,却又不知道怎么写

解决方案 »

  1.   

    if pixcolo2[x]<pixcolo1[x] then //如果颜色值中的R,G,B分别<图片对应的颜色值
      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;
      

  2.   

    上面代码错的呀,运行后没有图像啊是空白的Image 。
      

  3.   

      Sour.pixelFormat:=pf24bit;
         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
    ......