2009-12-10 72 views
1

我刚开始学习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的知识缺乏......任何帮助都会很棒。

如果它可以帮助在所有主要的Program.cs运行此作为其绘制函数

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

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

2

尝试从开始0。你使用的方法不是我认为的通常的xna方法。