帮忙改一下代码!

freshstudent 2003-05-19 09:29:50
下面这段代码本来我以为写对了,也交差了,后来才发现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;
...全文
42 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodloop 2003-05-19
  • 打赏
  • 举报
回复
加个round()函数试试
scanline[j].G:=Round(S/255);

或者
scanline[j].G:=S div 255;
888888888888 2003-05-19
  • 打赏
  • 举报
回复
关注
firetoucher 2003-05-19
  • 打赏
  • 举报
回复
1 scanline[j].G:=(int)S/255
2 除以256算了:)直接将 s shr 8

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧