C#中如何实现Photoshop魔术棒选取功能及反选功能
发布网友
发布时间:2022-04-19 12:43
我来回答
共2个回答
热心网友
时间:2022-04-19 14:12
同意一楼的观点,其实就是选区颜色将近的点的坐标然后进行处理
我贴下代码啊,你参考一下,用的是伪代码
坐标你可以定义一个类
比如
public class 坐标
{
public 坐标(int x,int y,Color c)
{
X=x;
Y=y;
color=c;
}
public int X;
public int Y;
public Color color;
}
Bitmap 图像 = new Bitmap();
Color curColor = 图像.GetPixel(x,y);//这里取得图像颜色
//开始在周围选取颜色相近的点,加入R的阈值为10
//用一个坐标记录选取的值
List<坐标> list = new List<坐标>();
//开始逐点扫描 by http://www.aub.org.cn/
for (int i = 0; i < 图像.Height; i++)
{
for (int j = 0; j < 图像.Width; j++)
{
Color c = 图像.GetPixel(i,j);//去当前的颜色值
if (c.R < curColor.R && c.R> curColor.R-10)
{
list.Add(new 坐标(i,j,c));
}
}
}
list 中即时你要做的选区的坐标列表,处理你的函数即可
TO楼主,其实思路已经说的很清楚了
list已经存贮了需要选择的坐标点,那么不就是选区吗?
如果你要实现反选的话无非再定义个List<坐标> 反选列表
if (c.R < curColor.R && c.R> curColor.R-10)
{
list.Add(new 坐标(i,j,c));
}else
{
//反选坐标
反选坐标列表.Add(new 坐标(i,j,c):
}
填充颜色
foreah(坐标 p in list)
{
图像.SetPixel(p.X,p.Y,你要设置的颜色值);
}
参考资料:http://www.aub.org.cn/216/Article70845.html
热心网友
时间:2022-04-19 15:30
具体实现方法不贴了
给你个头绪
处理图片前要让他保持在位图模式下
然后在你鼠标点下去的地方开始计算,(应该提供一个差值) 当当前点与临近点大于或者等于提供的差值时,临近点被选择.反之,不选择.
计算时方法很多,不过用"电视机"模式来计算是最简单,但是效率是最低下的.
反选很简单嘛, 做个否运算就行了.
不过这些都得逐点运算.这也是为什么开始叫你用位图的原因
具体的代码我写过,但是现在貌似找不到了