在内存中绘制一个坚固的多边形(不在屏幕上)
我需要在内存中绘制一个坚固的多边形(到二维数组中)并用数值(比如'3')填充多边形。在内存中绘制一个坚固的多边形(不在屏幕上)
我希望在C#中做到这一点。
我使用Catfood的Shapefile阅读器(非常好)从Shapefiles中获得实心多边形。
任何想法?
后我已经“映射” 16000条折线代表围绕圣地亚哥该道路网络我附加这2D阵列的一小部分(它们显示为数字“9”)。我希望通过上传一个实体多边形的形状文件和'数字'3'绘图'来做同样的事情。
创建一个Bitmap
,从中获得一个Graphics
,拨打电话FillPolygon
在Graphics
。
多边形通过shapefile进入。它必须是位图的透明blit ...我不想覆盖不在实体poly内的其他数据。 – zetar 2013-02-27 21:27:46
它不会覆盖不在多边形内的其他数据。它会覆盖多边形内的数据。 – 2013-02-27 21:42:55
去抢WriteableBitmapEx扩展。这将允许您在图像内存中绘制任何想要的内容。或者,你可以制作一个DrawingVisual,用它绘制任何你想要的,然后渲染成一个图像目标;参见:This example
如果你想通过System.Drawing路由去;
using System.Drawing;
Bitmap bmp = new Bitmap(200, 100);
Graphics g = Graphics.FromImage(bmp);
g.DrawLine(Pens.Black, 10, 10, 180, 80);
REF:(亨克Holterman)Drawing C# graphics without using Windows Forms
但我怀疑(基于措辞),这是家庭作业,而你已经被告知做手工;
所以;对于你想Bresenham的线算法的线条,然后用填充算法填充它们; See This
是的,我使用Bresenham为折线(参见上文)。不,这不是功课。它几年前会做出很好的任务。在我的生活中,我无法找到一个绘制实心聚合物的算法。自从我写了种子填充已经有20多年了(不想再这样做)。 – zetar 2013-02-27 21:24:52
看看这个库:你想要的功能:FillPolygon在 主干/来源/ WritableBitmapEx/WriteableBitmapFillExtensions.cs 在http://writeablebitmapex.codeplex.com/SourceControl/changeset/view/98508#1157213 – 2013-02-28 08:30:54
由于您正在绘制二维整型数组(因为我可以在编辑完问题后看到),所以您应该实现自己的多边形填充,它将数字存储在二维数组中。为此目的,您可以使用此职位Good algorithm for drawing solid 2-dimensional polygons?
另一种解决方法是一个小解决方法。您可以使用已经实现的填充位图中多边形的PolygonFill
。看一下这个。我必须警告说,获取位图像素非常缓慢,为此您可以使用一些FastBitmap实现。这里我将使用常规的位图。
Bitmap bmp = new Bitmap(0,0,mostRightPoint.X - mostLeftPoint.X, mostUpperPoint.Y - mostLowerPoint.Y);
//this implies that you are on the northern hemisphere
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White); //clear the whole bitmap into white color
int [] points = new points[nmbOfPoints];
for(int i = 0;i<nmbOfPoints;i++)
{
//put the points in the points array
}
g.FillPolygon(Brushes.Black, points);
g.Dispose();
现在,你应该通过位图进行迭代,对这些地方的像素是黑色的,把3号在你的二维数组,somethink这样。
for(int i = 0;i<bmp.Width;i++)
for(int j = 0;j<bmp.Height;j++)
if(Bitmap.GetPixel(i,j) == Color.Black)
{
2DArray[mostLeftPoint.X + i, mostLowerPoint.Y + j] = 3;
}
我觉得你有这个问题的意义和可能的解决方案。
什么是未呈现的多边形?如果它不在屏幕上,你如何绘制它?这没有意义。 – Oded 2013-02-27 20:59:16
您的多边形在第一位表现如何? – 2013-02-27 21:02:46
@Oded zetar看起来非常清楚,它正在询问如何渲染图像(并且可能将其保存到文件中),而不是将其直接渲染到屏幕上。 – 2013-02-27 21:05:58