日期:2014-05-20  浏览次数:20833 次

请问:C#可以实现这样功能吗?
查找出图片里所有黑色的颜色的坐标吗?(最好能应用在Web上)
我现在只可以做到用鼠标点击图片获取图片坐标,如果能够自动查找出来就好了,使用VC的人告诉我可以在内存里查找,我想C#可能出可以吧.大家有什么好的方法,请告之.

------解决方案--------------------
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这样的高档东西对付静态图片?