DrawImage()'sprite'没有显示出来

时间:2012-12-04 19:15:23

标签: c# graphics drawimage

我正在尝试使用字母表中定制的.PNG文件来为我的游戏提供一些漂亮的文字图形。但是,由于我的WinForms游戏的核心功能使用最少的图形(我有一个定时器设置来触发一个小动画例程,当用户输入他们已经尝试过的单词时淡出“Guessed”这个词 - 这是完成的使用DrawString())。现在我正在努力让DrawImage(Image, dstRect, srcRect, Unit)工作,我将它设置为在表单加载上运行。

    private void DrawLetters()
    {

        // Create image.
        Graphics letters = this.CreateGraphics();
        Image newImage = Image.FromFile(strPath + "Letter_Map.png");

        // Create rectangle for displaying image.
        Rectangle destRect = new Rectangle(25, 25, 80, 80);

        // Create rectangle for source image.
        Rectangle srcRect = new Rectangle(0, 0, 833, 833);
        GraphicsUnit units = GraphicsUnit.Pixel;

        // Draw image to screen.
        letters.DrawImage(newImage, destRect, srcRect, units);
    }

这几乎是MSDN网站的逐字逐句。我的表单现在填充了一系列标签,向用户显示游戏所需的字母网格。它们是否被覆盖以覆盖自定义矩形?我想最终用图像替换它们。我理解srcRect是(x,y,width,height)所以我给了它'spritesheet'的完整大小。对于dstRect,我只希望它在25x,25y左右的表格上放置一个80x80px的块。

对于它,我创建了一个空白表单,并在表单加载事件期间调用了我的DrawLetters()函数(我将函数复制到该表单的代码中)。我没有看到任何东西,所以我开始有点困惑。我可能需要一些关于绘图如何与在屏幕上绘制的表单和控件一起工作的教育。

编辑这个https://stackoverflow.com/questions/837423/render-a-section-of-an-image-to-a-bitmap-c-sharp-winforms是我最初的目标,但是这个用户具有XNA的工作知识,似乎正在尝试将其与WinForms结合起来。我相信XNA对于简单的文字游戏来说是过度的,我试图“漂亮”。

1 个答案:

答案 0 :(得分:2)

您需要覆盖表单OnPaintMethod才能访问表单Graphics对象,然后您可以使用它来在表单上显示图像。

如果要显示图像的一部分,则需要使用different overload of DrawImage,如下所示:

public partial class DrawImageDemo : Form
{
    public DrawImageDemo()
    {
        InitializeComponent();
    }

    private Image _sprites;
    public Image Sprites
    {
        get
        {
            if (_sprites == null)
            {
                _sprites = Image.FromFile("test.jpg");
            }
            return _sprites;
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        // The forms graphics object
        Graphics g = e.Graphics;

        // Portion of original image to display
        Rectangle region = new Rectangle(0, 0, 80, 80);

        g.DrawImage(Sprites, 25, 25, region, GraphicsUnit.Pixel);

        base.OnPaint(e);
    }

}