下面这段代码本来我以为写对了,也交差了,后来才发现s与v的值都少除255。这下我该怎么办呢,地址都是字节地址却要传一个双精度数?......
type//相关类型定义
TRGB=record
R,G,B:BYTE;
end;
TRGBLine=array[0..65535]of TRGB;
PRGBLine=^TRGBLine;
arr=array[0..255]of byte;
THue=0..359;
THSV=record
H:THue;
S,V:byte;
end;
......
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
scanline:PRGBLine;
H:Thue;
S,V:byte;
bmp:Tbitmap;
begin
bmp:=TBitmap.Create;
bmp.Assign(image1.picture.Bitmap);
for i:=0 to image1.Height-1 do
begin
scanline:=Bmp.Scanline[i];
for j:=0 to bmp.Width-1 do
begin
rgb2hsv(scanline[j].R,scanline[j].G,scanline[j].B,H,S,V);
scanline[j].R:=H;
scanline[j].G:=S;//现在要把s和v的值都除255,除了之后就变成double了,因为s和v的值本来是0到255之间的数
scanline[j].B:=V;
end;
end;
Image2.Picture.Bitmap.Assign(bmp);
Image2.Refresh;
bmp.Free;
end;
type//相关类型定义
TRGB=record
R,G,B:BYTE;
end;
TRGBLine=array[0..65535]of TRGB;
PRGBLine=^TRGBLine;
arr=array[0..255]of byte;
THue=0..359;
THSV=record
H:THue;
S,V:byte;
end;
......
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
scanline:PRGBLine;
H:Thue;
S,V:byte;
bmp:Tbitmap;
begin
bmp:=TBitmap.Create;
bmp.Assign(image1.picture.Bitmap);
for i:=0 to image1.Height-1 do
begin
scanline:=Bmp.Scanline[i];
for j:=0 to bmp.Width-1 do
begin
rgb2hsv(scanline[j].R,scanline[j].G,scanline[j].B,H,S,V);
scanline[j].R:=H;
scanline[j].G:=S;//现在要把s和v的值都除255,除了之后就变成double了,因为s和v的值本来是0到255之间的数
scanline[j].B:=V;
end;
end;
Image2.Picture.Bitmap.Assign(bmp);
Image2.Refresh;
bmp.Free;
end;
解决方案 »
- delphi使用循环语句向EXCEL插入多个图片,为何只有最后一张图片的大小是指定的大小?但如果单独插入一张图片却很正常? 小弟在此候教!
- 谁会用delphi编写汉字拼音输入法??
- Delphi7.0的类库
- 功能强的让你心动,界面漂亮的让你心动,价格便宜的让你心动
- (来者有分):用adodataset的commandtext的sql语句删除操作后,为什么提示recordset can not open!!
- 求函数指针语法问题解决方法,谢谢
- ******别让生活 把你改的面目前非******
- 大家看看偶能拿多少??
- I NEED HELP
- 如何使程序在OnClose时最小化?
- 预览的时候正常,打印的时候有时只能打印第一页
- 郁闷,要出差,回来就要被隔离,坐牢的感觉也不过如此。散分。
scanline[j].G:=Round(S/255);或者
scanline[j].G:=S div 255;
2 除以256算了:)直接将 s shr 8