C# 如何将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

我在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
    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是如何工作的。谢谢你们:)我现在知道了!小心这个。您需要在加载图像时使用
,否则在第二次调用此命令时,文件可能会被锁定。