图片处理算法?!

chybaby 2008-10-27 10:41:24
有一张图,想在图上根据用户指定的范围(多边形,各点已知)得到范围内的图片内容,而在范围之外则填充为其它的颜色。
...全文
166 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chybaby 2008-10-28
  • 打赏
  • 举报
回复
当然,有代码最好。
卧_槽 2008-10-28
  • 打赏
  • 举报
回复
就是想要代码么,直说么。
chybaby 2008-10-28
  • 打赏
  • 举报
回复
前面几部分不怎么理解?能具体给个演示吗?
zhoujk 2008-10-28
  • 打赏
  • 举报
回复
很简单,给你个思路吧。
原数据是一系列的点。
声明一个数组a(x,y),其值均为0.先将这些点按顺序连成多线段,然后将头尾相连,形成一个由线勾画成的封闭形(位图)线上的每个点值>0,如果要做成PS的蒙片效果,还需要在中间插值。
在a上自点(0,0)开始,使用种子算法,将所有相邻的为0的点连接起来,赋予一个高位值,如1.其它部分为0,返回为数组b//应切除图像,新增底色的部分
声明数组C = 1 - b;//应保留图像的部分
声明数组D = 源图 * C;//被保留的图像
声明数组E,由你指定的其它色彩赋值
E = b * E//做成底色的图像
声明数组 F = E + D
即得到答,输出。
其中的位图均是以数组的形式表达,位图与数组的具体转换方法略。
wartim 2008-10-28
  • 打赏
  • 举报
回复

namespace WindowsApplication29
{
public partial class Form1 : Form
{
Point[] Points = new Point[] { new Point(41, 42), new Point(200, 0), new Point(300, 200), new Point(220, 180), new Point(20, 240),
new Point(41,42) };

public Form1()
{
InitializeComponent();
Bitmap bmp = new Bitmap(pictureBox1.Image); // pictureBox1 放的是原图,宽>300,高>220
pictureBox2.Image = bmp; // 拷贝到pictureBox2先
GraphicsUnit gu = GraphicsUnit.Pixel;
RectangleF r = pictureBox2.Image.GetBounds(ref gu);
Region or = new Region(r); // 原始的图片大小的区间
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
gp.AddPolygon(Points);
Region nr = new Region(gp); // 多边形区间
or.Exclude(nr); // 原始的图片大小的区间减去多边形区间后的区间
Graphics g = Graphics.FromImage(pictureBox2.Image);
g.FillRegion(new SolidBrush(Color.Red), or); // 这个区间涂成红色,也就是你说的图片指定多边形区间外的区间
g.Dispose();
}
}
}
chybaby 2008-10-27
  • 打赏
  • 举报
回复
没有直接的算法来实现吗?不通过覆盖FORM实现
ojekleen 2008-10-27
  • 打赏
  • 举报
回复
这个好像有人写过这样的BLOG,百度搜搜
可以新建一个FORM或者其他控件之类,覆盖现有FORM,透明度为80左右,鼠标拖动时区域内透明度为100.
具体代码自己写写或者搜搜吧.
chybaby 2008-10-27
  • 打赏
  • 举报
回复
要求:
1:得到范围(多边形)中的图片。
2:填充范围之外的颜色。
liudanking 2008-10-27
  • 打赏
  • 举报
回复
可是试试IMAGEMAP控件

110,546

社区成员

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

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

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