获取鼠标位置的RGB值与灰度值

yang_zhenghua 2009-09-14 06:23:20
这问题困扰一个星期了,一直没解决, 实在没办法了来求助万能的CSDN。

问题上:

获取鼠标位置的RGB值与灰度值。

在网上也搜了很多代码,但要么运行不了,要么获取的就是16进制的颜色代码,我需要的是10进制的整数。

我的代码如下:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
t : TColor;
r,g,b : byte;
s,rr,gg,bb: String;
begin
//t := canvas.pixels[x,y];
t := Image1.Picture.Bitmap.Canvas.Pixels[x,y];
r := getRvalue(t);
g := getGvalue(t);
B := getBvalue(t);

rr:= IntToStr(r);
rr:= FloatToStr(StrToFloat(rr)* 0.299);
s:= s+'R颜色:'+rr;
gg:= IntToStr(g);
gg:= FloatToStr(StrToFloat(gg)* 0.587);
s:= s+' G颜色:'+gg;
bb:= IntToStr(b);
bb:= FloatToStr(StrToFloat(bb)* 0.114);
s:= s+' B颜色:'+bb;
//s:= s+' '+FloatToStr(StrToFloat(rr)+StrToFloat(gg)+StrToFloat(bb));
s:= s+' '+FloatToStr(t);
LABEL1.Caption:=s+' '+IntToStr(x)+' '+IntToStr(y);

end;

这段代码的问题:1鼠标移动色值不变.
2获取不了灰度值

望各位给个方法或函数,万分感激。。
...全文
510 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_zhenghua 2009-09-14
  • 打赏
  • 举报
回复
[size=18px]结贴前还有一个问题:

灰度值,可以获取了。

但功能并不能满足,还需要黑度,这个又怎么获取呢?[/
size]
yang_zhenghua 2009-09-14
  • 打赏
  • 举报
回复
2楼的方法获得了灰度值了,谢谢。
byteh 2009-09-14
  • 打赏
  • 举报
回复
将颜色值转换成灰度值,主要是利用灰度计算公式:灰度值=0.3*Red+0.3*Green+0.3*Blue改变RGB中的基本颜色。
程序开发步骤:
(1)运行Delphi,在窗体中添加TGroupBox、TImage、TBitBtn、OpenPictureDialog、TSaveDialog组件。
(2)将TImage组件的Stretch属性设为True。
(3)添加如下代码:
var
PByte :PByteArray;
Gray,x,y :Integer;
ImageBmp :TBitmap;
begin
ImageBmp :=TBitmap.Create; //创建TBitmap对象
ImageBmp.Assign(Image1.Picture.Bitmap); //将图片复制到ImageBmp中
ImageBmp.PixelFormat :=pf24Bit; //分配一个内存空间
for y:=0 to ImageBmp.Height-1 do //获取每一行的像素
begin
PByte := ImageBmp.scanline[y]; //用二进制数组存储每一行的像素值
for x:=0 to ImageBmp.Width-1 do //获取每一列的像素
begin
//灰度值的计算公式
//Round函数将一个实型值舍入为一个整型值
Gray:=Round(PByte[x*3+2]*0.3+PByte[x*3+1]*0.59+PByte[x*3]*0.11);
PByte[x*3]:=Gray; //改变R值
PByte[x*3+1]:=Gray; //改变G值
PByte[x*3+2]:=Gray; //改变B值
end;
end;
Image1.Picture.Bitmap.Assign(ImageBmp); //显示灰度图
ImageBmp.Free; //释放ImageBmp对象
end;
end;

摘自网上,本人没有试验
yang_zhenghua 2009-09-14
  • 打赏
  • 举报
回复
2楼发的方法看了,没有方法得到灰度值.
yang_zhenghua 2009-09-14
  • 打赏
  • 举报
回复
RGB值是获取了,但灰度值获取不了。
yang_zhenghua 2009-09-14
  • 打赏
  • 举报
回复
刚发快了,分数少了点,但真的是想快点解决问题,这功能没完成,会被BOSS给K死的。

16,747

社区成员

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

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