关于取色的问题(100分)

  • 主题发起人 主题发起人 wnr
  • 开始时间 开始时间
W

wnr

Unregistered / Unconfirmed
GUEST, unregistred user!
这样可以得到鼠标所指处的颜色
 
以前有人问过,我忘了怎么个说法了,呵呵
 
给你一段代码:
procedure TForm1.Button1Click(Sender: TObject);
var
pt:TPoint;
begin
GetCursorPos(pt);
Label1.Color := GetPixel(GetDC(0),pt.X,pt.Y);
end;
 
// Image1 : TImage;
在 Image1 的 ONMOVE 事件中
var
cColor : TColor;
begin
cColor := Image1.Picture.Bitmap.Canvas.Pixels(X, Y);
end;
 
按zhihuali的作没有错,我就是那样搞得!
 
[8D]如果要取屏幕上任意一点的颜色,就必须用GetPixel(GetDC(0),pt.X,pt.Y);了吧!
 
不管怎么样GetDC(0)都是取桌面的颜色,而不是取所指处的颜色
 
107. 跟踪屏幕像素颜色
在Form中放一 TLabel(Label1),再放置一定时器(TTimer).
然后粘贴以下定时器代码即可运行。
当鼠标在屏幕的任何位置移动时,Label中显示鼠标所指
像素的颜色(十六进制 RGB 格式)。

///////////////以下是定时器的处理代码:
procedure TForm1.Timer1Timer(Sender: TObject);
var
P: TPoint;
co: TColor;
ScreenDC : HDC;
fBitmap : TBitmap;
begin
GetCurSorPos(P);
fBitmap := TBitmap.Create;
fBitmap.Width := 1;
fBitmap.Height := 1;
ScreenDC:=CreateDC('DISPLAY',nil,nil,nil);
BitBlt(FBitmap.Canvas.Handle, 0,0,
FBitmap.Width, FBitmap.Height,
ScreenDC, p.x,p.y, SRCCOPY);
DeleteDC(ScreenDC);
label1.caption:=inttohex(fbitmap.canvas.pixels[0,0],8);
fBitmap.Free
end;

 
看到了吧!~高手的答案,我就觉得不对,怎么没有创建DC就瞎画
其实这段代码和考屏是一个意思
 
TO:rockjie
>>不管怎么样GetDC(0)都是取桌面的颜色,而不是取所指处的颜色
你有试过吗?你先把下面这段代码试一下,看是取哪里的颜色再说吧!
procedure TForm1.Timer1Timer(Sender: TObject);
var
pt:TPoint;
dskDC:HDC;
begin
dskDC :=GetDC(0);
try
GetCursorPos(pt);
Label1.Color := GetPixel(dskDC,pt.X,pt.Y);
Label2.Caption :=Format("颜色值:%s%s%s",[IntToHex(GetRValue(Label1.Color,2)),
IntToHex(GetGValue(Label1.Color,2)),
IntToHex(GetBValue(Label1.Color,2))]);
finally
ReleaseDC(Handle,dskDC);
end;
end;
这样就可以取屏幕上任意一点的颜色。更好一些的设计是弄一个鼠标勾子,而不用定时器。

 
后退
顶部