请问:C#可以实现这样功能吗? 查找出图片里所有黑色的颜色的坐标吗?(最好能应用在Web上)我现在只可以做到用鼠标点击图片获取图片坐标,如果能够自动查找出来就好了,使用VC的人告诉我可以在内存里查找,我想C#可能出可以吧.大家有什么好的方法,请告之. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是可以,GDI吧,接触比较少一些。 找是可以找的System.Drawing.Bitmap 这个很简单吧~~看看图形对象~~读取一图片成为图片对象,对象就有方法可以获取像素的值(就是颜色)~~看看System.Drawing命名空间下的对象吧~~~像Bitmap,Image,Color等等.... System.Drawing.Bitmap bmp = System.Drawing.Bitmap.FromFile("a.bmp");for (int i = 0; i < bmp.width; i++){ for (int j = 0; j < bmp.height; j++) { Color c = bmp.GetPixel(i, j); if (c = Colors.Black) //你的处理代码 }} 参考一下这个代码吧。根据你的实际需要修改返回值和相关代码。 public static DataTable Ki1381GetColorPoints(Bitmap bmp, Color c) { DataTable dt = new DataTable(); dt.Columns.Add("Left"); dt.Columns.Add("Top"); int w = bmp.Width; int h = bmp.Height; BitmapData src = bmp.LockBits(new Rectangle(0,0,w,h), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); unsafe { byte* p = (byte*)src.Scan0.ToPointer(); for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { if (p[0] == c.B && p[1] == c.G && p[2] == c.R) { // 根据你的实际需要修改这段代码 DataRow dr = dt.NewRow(); dr["Left"] = x.ToString(); dr["Top"] = y.ToString(); dt.Rows.Add(dr); } p += 3; } p += src.Stride - w * 3; } } bmp.UnlockBits(src); return dt; } 循环GetPixel吧,慢也慢了,你需要的是得到那一大落坐标,循环次数摆那里,快也快不到哪里去了. 难道直接用OpenGL或Direct2D这样的高档东西对付静态图片? C#中怎样求标准差? C#调用C++生成的DLL时,托管的 PInvoke 签名与非托管的目标签名不匹配 截获DataGridView的Tab键问题,急急急!谢谢! c#操作Access数据库,插入数据时超慢。 C#枚举问题 关于筛选的问题 Help!!!!! 动态URL 获取页面信息 求文件重名的解决思路 关于C#p2p编程时,无法注册对等名、无法启动名称解析之类的异常怎么解决。 请教从文本文件中第10行读数据的问题 一个C#中用户控件的问题,在用户控件中实现ComboBox的Items的属性
System.Drawing.Bitmap
读取一图片成为图片对象,对象就有方法可以获取像素的值(就是颜色)~~看看System.Drawing命名空间下的对象吧~~~
像Bitmap,Image,Color等等....
for (int i = 0; i < bmp.width; i++)
{
for (int j = 0; j < bmp.height; j++)
{
Color c = bmp.GetPixel(i, j);
if (c = Colors.Black) //你的处理代码
}
}
{ DataTable dt = new DataTable();
dt.Columns.Add("Left");
dt.Columns.Add("Top"); int w = bmp.Width;
int h = bmp.Height; BitmapData src = bmp.LockBits(new Rectangle(0,0,w,h), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); unsafe
{
byte* p = (byte*)src.Scan0.ToPointer(); for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{ if (p[0] == c.B && p[1] == c.G && p[2] == c.R)
{
// 根据你的实际需要修改这段代码 DataRow dr = dt.NewRow();
dr["Left"] = x.ToString();
dr["Top"] = y.ToString();
dt.Rows.Add(dr);
} p += 3;
} p += src.Stride - w * 3;
}
} bmp.UnlockBits(src); return dt;
}