C# 如何将png保存在矩形中?
我在Winforms中创建了一个蛇游戏,我需要一些png作为食物。 如何将png保存在矩形中? 下面是一些代码:C# 如何将png保存在矩形中?,c#,image,winforms,png,rectangles,C#,Image,Winforms,Png,Rectangles,我在Winforms中创建了一个蛇游戏,我需要一些png作为食物。 如何将png保存在矩形中? 下面是一些代码: class Food { #region Variables private int x, y, widht = 20, hight = 20; private SolidBrush brush; public Rectangle foodrectangle; int fieldsize_X = 47;// spawnrange in
class Food
{
#region Variables
private int x, y, widht = 20, hight = 20;
private SolidBrush brush;
public Rectangle foodrectangle;
int fieldsize_X = 47;// spawnrange
int fieldsize_Y = 38;// spawnrange
int squaresize = 20;
#endregion
“worth”变量是一个随机数,因此我可以使用随机颜色
#region Normal Food
public void changecolor()
{
switch (Form1.worth)
{
case 1:
brush = new SolidBrush(Color.Red);
break;
case 2:
brush = new SolidBrush(Color.Orange);
break;
case 3:
brush = new SolidBrush(Color.Yellow);
break;
case 4:
brush = new SolidBrush(Color.Blue);
break;
case 5:
brush = new SolidBrush(Color.White);
break;
default: brush = new SolidBrush(Color.Red); break;
}
}
public Food(Random randomfood)
{
changecolor();
x = randomfood.Next(0, fieldsize_X) * squaresize;
y = randomfood.Next(0, fieldsize_Y) * squaresize;
foodrectangle = new Rectangle(x, y, widht, hight);
}//creat Food
我使用计时器,所以我需要在时间开始前产卵。当你按下箭头键时,计时器开始计时
public void Foodlocation (Random randomfood)
{
changecolor();
x = randomfood.Next(0, fieldsize_X) * squaresize;// 0 = spawnrange to the next food
y = randomfood.Next(0, fieldsize_Y) * squaresize;
foodrectangle.X = x; //X.Max = 47 * 20 = 940
foodrectangle.Y = y; //Y.Max = 38 * 20 = 760
foodrectangle = new Rectangle(x, y, widht, hight);//spawn first food
}
public void drawFood (Graphics paper)
{
paper.FillRectangle(brush, foodrectangle);
}
#endregion
}
我想要一个依赖于“worth”变量的png,而不是颜色。
如果“worth”=1,那么正方形有apple.png或类似的东西。这应该可以
public void drawFood (Graphics paper)
{
// Load a png object from a file.
Image sourceImage = Image.FromFile(@"C:\my.png");
// Draw a portion of the source image.
paper.DrawImage(sourceImage, foodrectangle.X, foodrectangle.Y, new Rectangle(0, 0, squaresize, squaresize), GraphicsUnit.Pixel);
}
您可以使用Graphics.DrawImage轻松完成此操作,然后设置正确的位置您的
changeColor
方法正在泄漏大量GDI句柄。刷子需要处理。至少,您应该有brush.Dispose()代码>位于该方法的顶部。很好,不过您可能希望将该图像存储在内存中的某个位置,而不是每次渲染时都从磁盘加载该图像+谢谢你们:)但它不起作用。我试图做一个转换(失败)。我试着做一个像你一样的人(失败)。我试着换了一张纸。DrawImage(sourceImage,foodrectangle.X,foodrectangle.Y,新矩形(0,0,fieldsize_X,fieldsize_Y),GraphicsUnit.Pixel);这很有效。但是FieldSize而不是squaresize的变化,只显示了png的一部分,而不是在正确的位置上。你知道为什么吗?矩形定义了图像的绘制部分。如果它不是完整的png,那么png比您的squaresize(或fieldsize)大。sourceImage后面的两个参数定义图像的位置。你们可能需要更改它们,我不完全确定你们的Cordinate是如何工作的。谢谢你们:)我现在知道了!小心这个。您需要在加载图像时使用,否则在第二次调用此命令时,文件可能会被锁定。