有一张图,想在图上根据用户指定的范围(多边形,各点已知)得到范围内的图片内容,而在范围之外则填充为其它的颜色。
解决方案 »
- 求 C# 文字和图片一起打印的写法
- NHibernate 入门例子(急求)
- c#用http协议真差劲。。。。
- 关于sender的简单的问题
- 连接数据库有问题吗?
- 怎么样能用C#获取真实的下载地址恩,累似与flashGet的下载功能?
- 对于有cvs版本控制的.net项目,如何去掉cvs,使之能够直接把项目拷贝到其他机器运行?多谢!
- C#代码编译时的奇妙问题求解
- c#如何对一个打开的excel表格的一个区域的数据,按照某两列的大小进行按行排序?
- 在WinForm中的DataGrid控件,如何用按钮的方式实现新增与删除?
- 怎样在程序运行的时候能重新读取 程序.exe.config.
- 请问用mysqldrivercs做的查询mysql数据库的程序怎么在别人的机器上正常运行?
可以新建一个FORM或者其他控件之类,覆盖现有FORM,透明度为80左右,鼠标拖动时区域内透明度为100.
具体代码自己写写或者搜搜吧.
原数据是一系列的点。
声明一个数组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
即得到答,输出。
其中的位图均是以数组的形式表达,位图与数组的具体转换方法略。
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();
}
}
}