为什么我的图片没有加载?

时间:2012-08-08 04:49:21

标签: c# xna

    private void LoadImageList()
    {
        string filepath = Application.StartupPath + @"\Content\Textures\Tiles\PlatformTiles.png";
        Bitmap tileSheet = new Bitmap(filepath);
        int tilecount = 0;

        for (int y = 0; y < tileSheet.Height / TileGrid.TileHeight; y++)
        {
            for (int x = 0; x < tileSheet.Width / TileGrid.TileWidth; x++)
            {
                Bitmap newBitmap = tileSheet.Clone(
                    new System.Drawing.Rectangle(
                        x * TileGrid.TileWidth,
                        y * TileGrid.TileHeight,
                        TileGrid.TileWidth,
                        TileGrid.TileHeight),
                        System.Drawing.Imaging.PixelFormat.DontCare);

                imgListTiles.Images.Add(newBitmap);
                string itemName = "";
                if (tilecount == 0)
                {
                    itemName = "Empty";
                }
                if (tilecount == 1)
                {
                    itemName = "White";
                }
                listTiles.Items.Add(new ListViewItem(itemName, tilecount++));
            }
        }
    }

我所做的只是用更新的版本更新PlatformTiles.png,下次运行程序时它不会加载。我在 int tilecount = 0; 处放置了一个断点,但它没有到达它。之后的所有东西都没有加载。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

Bitmap是指System.Drawing.Bitmap吗?如果是这样,您的代码有内存泄漏。您正在创建数百(数千?)个Bitmap对象而不进行处理。每个Bitmap对象都封装了一个必须明确处理的GDI Bitmap表面。使用C#using(Bitmap bmp) { }块以确保它们在超出范围时被丢弃,或者确保在处理父类对象时丢弃位图。

这可能与您的问题有关(通常在您达到GDI对象限制时创建太多位图是个坏主意。)

答案 1 :(得分:0)

我摆脱了字符串并替换了filepatth,Bitmap tileSheet = new Bitmap(filepath);,我的硬盘驱动器上的图像路径也正常工作。解决方案,但可以使用一些解释。

答案 2 :(得分:0)

如果文件是内容项目的一部分,并且它的Build Action设置为Compile,则运行时该文件夹中的文件没有.png扩展名,因此永远不会创建Bitmap。内容资产的扩展名为.xnb,因为它们已编译为二进制格式。将构建操作更改为无,将复制到输出方向更改为复制