GDI+是新的.NET Framework中基于类的二维图形、图像和版面的应用编程接口。 与旧版本的GDI相比,GDI+具有一些实质性的改进,包括更好的性能、更多的功能,它甚至可以在64位计算机系统上运行,GDI+确实值得认真研究。
一、使用Graphics对象执行图形操 1、使用PaintEventArgs参数创建Graphics对象 我们看例子。下面的代码展示了如何在屏幕的(10,20)位置上绘制一个简单的红色长方形,长方形的高是7,长是17,以像素为单位。
private picSourcePaint(object sender,PaintEventArgs e)
{
e.Graphics.FillRectangle(new SolidBrush(Color.Red),10,20,13,7);
}
2、使用窗口句柄创建Graphics对象 我们可以通过一个句柄来指向窗口的可拖拽部分。这个句柄就是Graphics对象,它可以通过Graphics.FromHwnd方法获得。看下面例子:
Graphics graph=new Graphics();
graph=Graphics.FromHwnd(pictureBOx.Handle); graph.FillRectangle(new SolidBrush(Color.Red),10,20,13,7);
注:此方法验证成功
3、从图像中创建Graphics对象 当pictureBox中有图像时,可用以下方法
Graphics graph;
graph=Graphics.FromHwnd(pictureBOx.image);
graph.FillRectangle(new SolidBrush(Color.Red),10,20,13,7);
注:此方法没有验证通过。
二、创建梯度
下面示例代码展示了如何创建一个色彩均一的梯度画笔,并使用该画笔从左上角到右下角绘制了一个色彩从红色变换到蓝色的长方形。
Graphics graph;
Drawing2D.LinearGradientBrush linGrBrush;
graph=Graphics.FromHwnd(picturBox.Handle);
linGrBrush=new LinearGradientBrush(new Point(10, 20), new Point(110, 70), Color.FromArgb(255, 255, 0, 0), Color.FromArgb(255, 0, 0, 255));
graph.FillRectangle(linGrBrush, 10, 20, 100, 50);
三、冲突检测
1、限定框算法:在对象的周围建立一些框,依据这些对象,在一个可以接受的精度范围内检测其上的最小冲突。
当两个矩形框和重合的时候,说明两个对象发生了冲突。基检测方法很简单,即看两个限定框在水平方向上的坐标之差是否大于两个限定框的长之和,且水平方向上的坐标之差是否大于两个限定框之和。若不满足,说明发生冲突。
2、邻近性检测算法
算法基本思想:先计算两个对象中心之间的距离,然后检查某个公式的值。
(1)、两个圆形对象的冲突
建立二维坐标,计算是否相切即可。
(2)、圆形和正方形的冲突
以正方形两边为坐标,看正方形到圆心最近点跟那个最近点的XY方向的差值,看是否符合勾股定理。