C# .net GDI+ 绘图问题

Point[,]starsum=newPoint[50,8];//定义一个二维数组用于存放多边形(星星)for(inti=0;i<49;i++){starsum[i,0]... Point[,] starsum = new Point[50,8];//定义一个二维数组用于存放多边形(星星)

for (int i = 0; i < 49; i++)
{
starsum[i, 0].X = rnd.Next(0, this.Width);
starsum[i, 0].Y = rnd.Next(0, this.Height);//确定各个多边形(星星)的位置

starsum[i, 1].X = starsum[i, 0].X - 1;
starsum[i, 1].Y = starsum[i, 0].Y + 2;

starsum[i, 2].X = starsum[i, 0].X - 2;
starsum[i, 2].Y = starsum[i, 0].Y + 3;

starsum[i, 3].X = starsum[i, 0].X - 1;
starsum[i, 3].Y = starsum[i, 0].Y + 4;

starsum[i, 4].X = starsum[i, 0].X;
starsum[i, 4].Y = starsum[i, 0].Y + 6;

starsum[i, 5].X = starsum[i, 0].X + 1;
starsum[i, 5].Y = starsum[i, 0].Y + 4;

starsum[i, 6].X = starsum[i, 0].X + 2;
starsum[i, 6].Y = starsum[i, 0].Y + 3;

starsum[i, 7].X = starsum[i, 0].X + 1;
starsum[i, 7].Y = starsum[i, 0].Y + 2;
}

//已经定义了名为g2 的画布
for(int i = 0; i < 49; i++)
{
g2.FillPolygon(p3, starsum[i], FillMode.Winding);
//这边第二个参数报错说不能有Point转换到PointF
}
难道不能这样话多边形吗?求高手,求一个画星星的方法(PS 星星位置要固定不变)
展开
 我来答
kikeyx
2010-12-16
知道答主
回答量:12
采纳率:0%
帮助的人:9.7万
展开全部

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给出来的解答,希望不会差太多,祝楼主学习愉快

khlerc
2010-12-14 · TA获得超过420个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:272万
展开全部
改成PointF就行了:

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

另外,最后一行里面的starsum 使用不正确吧?它是个二维数组,你却当成一维来用,会出错的:
for(int i = 0; i < 49; i++)
{
g2.FillPolygon(p3, starsum[i] /* <----这里 */, FillMode.Winding);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式