C# .net GDI+ 绘图问题

2024-12-13 20:54:53
推荐回答(2个)
回答1:

c#中FillPolygon有四个重载函数,

FillPolygon(Brush, Point[])  填充 Point 结构指定的点数组所定义的多边形的内部。

FillPolygon(Brush, PointF[])  填充 PointF 结构指定的点数组所定义的多边形的内部。

FillPolygon(Brush,Point[]) ,FillMode)  使用指定的填充模式填充 Point 结构指定的点数组所定义的多边形的内部。 

FillPolygon(Brush, PointF[], FillMode)  使用指定的填充模式填充 Point 结构指定的点数组所定义的多边形的内部。

就类型来看LZ无论用Point或者PointF都没问题,问题出在第二个参数为Point[]而楼主给的参数是一个之给定了一个边界的二位数组,所以肯定要出错的,我不知道楼主要什么结果,这里我给出一种解决方法,希望能够启发你达到自己的目的:(只改输出部分)

 for (int i = 0; i < 49; i++)

            {

                Point[] temp=new Point[8];

                for(int j=0;j<8;j++)

                     temp[j]= starsum[i,j];

                

                g2.FillPolygon(p3,  temp, FillMode.Winding);

                //这里temp是一个Point[]类型的变量了            }

我自己测试的结果好像lz要画彗星啊,哈哈哈我自学的是vc++

不过c#比起c++好接受,我第一次用c#看了会儿MSDN给出来的解答,希望不会差太多,祝楼主学习愉快

回答2:

改成PointF就行了:

PointF[,] starsum = new PointF[50,8];

另外,最后一行里面的starsum 使用不正确吧?它是个二维数组,你却当成一维来用,会出错的:
for(int i = 0; i < 49; i++)
{
g2.FillPolygon(p3, starsum[i] /* <----这里 */, FillMode.Winding);
}