¤★ 200 分哦 ★¤

sumtec 2003-04-23 12:30:24
环境:VS.NET 2003/PocketPC/WinCE.NET
问题:如何获得屏幕上任一点的颜色?或者
如何获得某个没有Image/BackgroundImage的控件上任一点的颜色?

这个问题……俺不会……up者有一分,重复up的0分,回答错误的0分,回答正确的平分剩下的分数。注意环境。(有帮助的酌情给分)

其实我想这个问题跟VS.NET 2002/80x86/WinXXXX里面的应该是一样的,不过还是不会。

为什么要这么做?因为:
我这个控件很可能要有1024*1024这么大,而且还有放大功能,主要是在上面画一些点和线。当然,这些点和线要能够响应一些事件,比如Click。点呢,是一个控件,我不用去费心思,问题是线是动态画上去的,如何判断点到的是一条线段?
如果通过创建一个背景Image,当然可以通过Image.GetPixel来获得,但是这不现实,因为1024*1024*3(颜色)*100(放大十倍) = 300MB,这样子对于PocketPC根本就无法承受。所以只好委屈一下,动态作图了,但是却无法得知某一点的颜色……

望高手解答。
...全文
42 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
sumtec 2003-04-25
  • 打赏
  • 举报
回复
……
asam2183 2003-04-25
  • 打赏
  • 举报
回复
up
shenweiqiu 2003-04-25
  • 打赏
  • 举报
回复
你作图象处理软件吗?为要用.NET?
用VC++不好吗?
Jinniu 2003-04-25
  • 打赏
  • 举报
回复
up
jlhdlj 2003-04-25
  • 打赏
  • 举报
回复
支持下!
desrie 2003-04-25
  • 打赏
  • 举报
回复
up
大健 2003-04-25
  • 打赏
  • 举报
回复
up
sumtec 2003-04-25
  • 打赏
  • 举报
回复
开始的时候我也以为可以,后来想象,PPC上面好像没有PrintScreen这个按钮啊。

似乎应该找GetPixel,不过不知道在PPC里面是在什么DLL里面的,要找找了。


(有没有更直接的回答?)
ChristianBoris 2003-04-25
  • 打赏
  • 举报
回复
用.net着色不是明智之举,应该用MAYA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
hongshun 2003-04-25
  • 打赏
  • 举报
回复
楼主自己试试吧. 我是没机会 在 ce 上
Montaque 2003-04-25
  • 打赏
  • 举报
回复
pocket pc有PRTSC吗?
chainet 2003-04-25
  • 打赏
  • 举报
回复
hongshun(好好)的方法也是一种思路,
只是让剪贴板来来回回捣腾,对效率会不会有一定的影响?要知道那可是CE,呵呵~
xzgtysx 2003-04-25
  • 打赏
  • 举报
回复
up
hongshun 2003-04-25
  • 打赏
  • 举报
回复
我有个简单的方法. 可以去屏幕上的任意一点的颜色.

public System.Drawing.Color ReturnCol (int x,int y)

{ SendKeys.SendWait("^{PRTSC}");
Bitmap obj;
IDataObject iData=Clipboard.GetDataObject();
obj =(Bitmap) iData.GetData(DataFormats.Bitmap);
return obj.GetPixel(x,y);
}
colin666 2003-04-25
  • 打赏
  • 举报
回复
up
szseesea 2003-04-25
  • 打赏
  • 举报
回复
up
chainet 2003-04-25
  • 打赏
  • 举报
回复
我试了一下,用API在PC机上完全可以取到屏幕上一点的颜色(其实是你控件上的一点).
是用GDI+中的GetPixel函数
代码如下:
[DllImport("gdi32.dll")]
private static extern long GetPixel(IntPtr hDc,int x, int y);
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
Graphics g = this.CreateGraphics();
IntPtr hdc = new IntPtr();
hdc = g.GetHdc();
Console.WriteLine("{X ="+e.X+" Y ="+e.Y +"}");
long color = GetPixel(hdc,e.X,e.Y);
g.ReleaseHdc(hdc);
Console.WriteLine(" {0,2:X}",color);
}

//这里得出来的color是长型,转变成十六进制的格式后的最后八位就是ARGB的颜色,这个转换过程我没写,相信对你是很轻松的了.
qiujoe 2003-04-25
  • 打赏
  • 举报
回复
当时用的是VB不是.NET,不是pocketpc
houjianxun 2003-04-23
  • 打赏
  • 举报
回复
搬个凳子看....
享受生活 2003-04-23
  • 打赏
  • 举报
回复
up
加载更多回复(28)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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