我想用画笔画一个能渐进的色度条,我先用数组存放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.
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.
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/
去看看有没有你要的代码。
我把程序修改了一下,可是运行后倒是显示色度条了,可只是一条纯黑色的色条,没有渐进色彩,不知道是怎么回事,请高手指点!
先在窗体上拖上一个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.
var
i,j,X:integer;
ColorArray:array[1..1152] of TColor; //去掉函数里的这个定义
begin 你的函数里是调用的一个外部的公用变量