我想用画笔画一个能渐进的色度条,我先用数组存放1152种颜色,然后用画笔画,可是运行结果不是我想要得结果,不知道是什么地方出现了问题,请那位老师指教,不胜感激!具体代码如下:
procedure GetColorArray();//存放1152种颜色
var
  i,j,X:integer;
   ColorArray:array[1..1152] of TColor;
begin
      for X:=0 to 1151 do
  begin
    I:= X MOD 128 ;
    J:= X DIV 128+1;
    case j of
      1:ColorArray[X]:=RGB(0,0,i+128); //////(0,0,128)(0,0,255)
      2:ColorArray[X]:=RGB(0,i,255); //////(0,0,255)(0,127,255)
      3:ColorArray[X]:=RGB(0,i+128,255); //////(0,128,255)(0,255,255)
      4:ColorArray[X]:=RGB(0,255,255-i); //////(0,255,255)(0,255,128)
      5:ColorArray[X]:=RGB(i,255,127-i); //////(0,255,127)(127,255,0)
      6:ColorArray[X]:=RGB(I+128,255,0);//////(128,255,0)(255,255,0)
      7:ColorArray[X]:=RGB(255,255-i,0); //////(255,255,0)(255,128,0)
      8:ColorArray[X]:=RGB(255,127-i,0); //////(255,127,0)(255,0,0)
      9:ColorArray[X]:=RGB(255-i,0,0); //////(255,0,0)(128,0,0)
  end;
end;
end;
procedure TForm2.Button1Click(Sender: TObject);//在image1上画水平渐进的色度条
var K:integer;
    i:integer;
    Image1: TImage;
    ColorArray:array[1..1152] of TColor;
begin
   GetColorArray();
   K:=0;
   IF K<1152 THEN
   begin
     SELF.Image1.Canvas.Pen.Create;
     self.Image1.Canvas.pen.Width:=1;
     SELF.Image1.Canvas.Pen.Color:=ColorArray[K];
     i:=muldiv(k,self.image1.Width,1152);//确定色度条上第k种颜色在色度条上的对应位置
     Self.IMAGE1.Canvas.MoveTo(image1.Left+i,image1.top);
     SELF.IMAGE1.Canvas.LineTo(image1.Left+i,image1.top+10);
     K:=K+1;
     end;end;end.

解决方案 »

  1.   

    ColorArray???谁告诉你的参数传递方式?
      

  2.   

        SELF.Image1.Canvas.Pen.Create; //这部分,不用Create,本来就是有Pen的。
        self.Image1.Canvas.pen.Width:=1; 
        SELF.Image1.Canvas.Pen.Color:=ColorArray[K]; 
        i:=muldiv(k,self.image1.Width,1152);//确定色度条上第k种颜色在色度条上的对应位置 
        Self.IMAGE1.Canvas.MoveTo(image1.Left+i,image1.top); 
        SELF.IMAGE1.Canvas.LineTo(image1.Left+i,image1.top+10); 
        K:=K+1; 
        end; 这样做法,我都无从说起。
    汗。你可以bmp:TBitmap;bmp:=TBitmap.Create;
    bmp.Height:=100;
    bmp.Widht:=100;
    bmp.Canvas.
    ...
    ...
    Image1算了,当我没来过。
    不过,我原本做色卡测试程序的时候,看到过一个网站专门做色度空间的。而且是Delphi代码。
    http://www.efg2.com/Lab/
    去看看有没有你要的代码。
      

  3.   

    先谢谢楼上的老师们的关注和指点,
    我把程序修改了一下,可是运行后倒是显示色度条了,可只是一条纯黑色的色条,没有渐进色彩,不知道是怎么回事,请高手指点!
    先在窗体上拖上一个image控件和一个button控件,程序完整代码如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Image1: TImage;
        Button1: TButton;    procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
         private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
         ColorArray:array[1..1152] of TColor;
    implementation{$R *.dfm}
    procedure GetColorArray();
    var
      i,j,X:integer;
       ColorArray:array[1..1152] of TColor;
    begin
          for X:=0 to 1151 do
      begin
        I:= X MOD 128 ;
        J:= X DIV 128+1;
        case j of
          1:ColorArray[X]:=RGB(0,0,i+128); //////(0,0,128)(0,0,255)
          2:ColorArray[X]:=RGB(0,i,255); //////(0,0,255)(0,127,255)
          3:ColorArray[X]:=RGB(0,i+128,255); //////(0,128,255)(0,255,255)
          4:ColorArray[X]:=RGB(0,255,255-i); //////(0,255,255)(0,255,128)
          5:ColorArray[X]:=RGB(i,255,127-i); //////(0,255,127)(127,255,0)
          6:ColorArray[X]:=RGB(I+128,255,0);//////(128,255,0)(255,255,0)
          7:ColorArray[X]:=RGB(255,255-i,0); //////(255,255,0)(255,128,0)
          8:ColorArray[X]:=RGB(255,127-i,0); //////(255,127,0)(255,0,0)
          9:ColorArray[X]:=RGB(255-i,0,0); //////(255,0,0)(128,0,0)
      end;
    end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var K:integer;
        i:integer;begin
       i:=0;
       while i<=1151 do
        begin
         k:=muldiv(i,image1.Width,1152);
         Image1.Canvas.pen.Width:=4;
         Image1.Canvas.Pen.Color:=ColorArray[i];
         IMAGE1.Canvas.MoveTo(k,10);
         IMAGE1.Canvas.LineTo(k+1,10);
         i:=i+1;
        END;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
     GetColorArray();
    end;end.
      

  4.   

    procedure GetColorArray(); 
    var 
      i,j,X:integer; 
      ColorArray:array[1..1152] of TColor; //去掉函数里的这个定义
    begin 你的函数里是调用的一个外部的公用变量
      

  5.   

    太感谢了,真厉害!我现在正在做delphi得东西,能留个qq号,方便想你请教吗!