• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

如何获取屏幕指定坐标的颜色或者鼠标位置点的颜色

joseph0311 2004-11-02 07:10:19
如何获取屏幕指定坐标的颜色或者鼠标位置的屏幕颜色...请各位帮帮忙...
...全文
491 1 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
joseph0311 2005-03-23
一直忘了,到现在才结帖,真是不好意思啊...
回复
AhBian 2004-11-02
[DllImport("gdi32.dll")]
static public extern uint GetPixel(IntPtr hDC, int XPos, int YPos);

[DllImport("gdi32.dll")]
static public extern IntPtr CreateDC(string driverName, string deviceName, string output, IntPtr lpinitData);

[DllImport("gdi32.dll")]
static public extern bool DeleteDC(IntPtr DC);

static public byte GetRValue(uint color)
{
return (byte)color;
}

static public byte GetGValue(uint color)
{
return ((byte)(((short)(color)) >> 8));
}

static public byte GetBValue(uint color)
{
return ((byte)((color)>>16));
}

static public byte GetAValue(uint color)
{
return ((byte)((color)>>24));
}

static public Color GetColorOfScreen(Point screenPoint)
{
IntPtr displayDC = CreateDC("DISPLAY", null, null, IntPtr.Zero);
uint colorref = GetPixel(displayDC, screenPoint.X, screenPoint.Y);
DeleteDC(displayDC);
byte Red = GetRValue(colorref);
byte Green = GetGValue(colorref);
byte Blue = GetBValue(colorref);
return Color.FromArgb(Red, Green, Blue);
}

这段代码很简单,听起来很复杂的东西,其实很简单的。
我看过论坛上的许多回帖,不少有点走弯路,还要 BitBlt,还要 Bitmap,其实都是不必的。
而且忽略了 GetPixel 获取的 uint 值与 Color 的四个分量之间的对应关系。
Color.ToARGB() 结果的顺序是 ARGB,而 GetPixel() 返回的是 ABGR。
回复
lxrxyz 2004-11-02
http://search.csdn.net/Expert/topic/1871/1871865.xml?temp=.9658167
回复
chaorie 2004-11-02
我不知道。帮你顶下。
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-11-02 07:10
社区公告

让您成为最强悍的C#开发者