在image控件中载入一个bmp图象,请问如何修改图象中某一个点的rgb值。

解决方案 »

  1.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
        color:TColor;
        r,g,b:Byte;
    begin
        r:=100;
        g:=90;
        b:=128;
        color:=(R and $FF)+(G and $FF00) shr 8+(Color and $FF0000) shr 16;
        Image1.Picture.Bitmap.Canvas.Pixels[5,5]:=color;
        Image1.Picture.Bitmap.Canvas.Pixels[5,6]:=color;
    end;
      

  2.   

    如果是单点,而且图像不是包括Alpha通道的32位色图,Bitmap.Canvas.Pixels调用GDI实现比较方便~~~如果是大量像素,或者是32位色图效率最高的方法是由Bitmap.ScanLine[Bitmap.Height]取第一行的首地址,自己根据位图位数的不同取不同的偏移地址写入相应值,如果是Index位图还涉及到查询调色板取最接近值,小于8位的还涉及到位运算.当然自己还要知道位图在内存中的结构,如每行要按4字节补齐
      

  3.   

    首先谢谢各位的解答。 
      gzmhero(hihihi) ,我试了你的方法,的确可以修改颜色,但是我发现修改的颜色不是我最初期望的,好象我在程序中设置的颜色值会和图中的颜色值相加。
      例如,如果图象中本来的颜色是白色的,那么执行后的确可以得到事先期望的颜色,但是如果图象不是白色的,则执行后则会出现其他颜色。不知道这是为什么?