将自定义创建的位图绘制到屏幕上

时间:2009-12-10 06:14:37

标签: c# xna

我刚刚开始学习XNA。这是我作为一个有趣的“有趣”项目写的第一个程序。

我在绘制创建到屏幕上的位图时遇到了问题。

我知道正在正确创建位图,因为当我运行

bitmap.Save( @"C:\jnk\test.bmp", System.Drawing.Imaging.ImageFormat.Bmp );

它保存了正确的位图

我试图从类绘制函数中显示图像但是无法显示任何内容。我找到了一些使用System.Drawing.Graphics类创建位图的源代码,它还显示它使用

将其绘制到屏幕上
bitmapGraphics.DrawImage( bitmap, new System.Drawing.Point( this.boardXOffset, this.boardYOffset ) );

bitmapGraphics是一个Systems.Drawing.Graphics对象,boardOffsets都是0.我试图从一个在我的main的draw函数中调用的类中绘制它。

然而,我什么都没得到,没有错误,没有显示。我猜这是因为它不知道要绘制它的对象是什么?但是我缺乏对xna的了解......任何帮助都会很棒。

如果它对所有主程序有帮助,则将其作为绘图函数运行

protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear( Color.CornflowerBlue );
BoardGraphicsEngine.Draw();
base.Draw(gameTime);
}

并且BoardGraphicsEngine中的绘制函数是

public void Draw( )
{

int width = Convert.ToInt32( System.Math.Ceiling( board.pixelWidth ) );
int height = Convert.ToInt32( System.Math.Ceiling( board.pixelHeight ) );
width += 1;
height += 1;

Bitmap bitmap = new Bitmap( width, height );
Graphics bitmapGraphics = Graphics.FromImage( bitmap );
Pen p = new Pen( System.Drawing.Color.Black );
SolidBrush sb = new SolidBrush( System.Drawing.Color.Black );

sb = new SolidBrush( board.boardState.backgroundColor );
bitmapGraphics.FillRectangle( sb, 0, 0, width, height );

    ... Loop through board and create with a couple calls to 
    bitmapGraphics.FillPolygon( new SolidBrush( board.hexes[i, j].hexState.BackgroundColor ), board.hexes[i, j].points );
    and
    bitmapGraphics.DrawPolygon( p, board.hexes[i, j].points );
    and
    bitmapGraphics.DrawPolygon( p, board.boardState.activeHex.points );


//bitmap.Save( @"C:\jnk\test.bmp", System.Drawing.Imaging.ImageFormat.Bmp );

bitmapGraphics.DrawImage( bitmap, new System.Drawing.Point( this.boardXOffset, this.boardYOffset ) );

        bitmapGraphics.Dispose();
        bitmap.Dispose();
    }

}

大部分内容的原始来源是http://www.codeproject.com/KB/graphics/hexagonal_part1.aspx但问题的一部分可能是这个例子是一个Windows窗体,我正在创建一个xna项目

2 个答案:

答案 0 :(得分:2)

尝试从xna 2d tutorial开始。您使用的方法不是我认为的常用xna方法。

答案 1 :(得分:2)

我对XNA知之甚少,但你绝对不会在这里使用XNA。您正在使用.NET接口到GDI +,而您的Draw()方法将所有内容渲染到屏幕外位图(bitmapGraphics),除非您将其渲染到屏幕缓冲区,否则它不会显示在屏幕上。如果您想学习XNA,我建议您参考特定于XNA的教程。