0
    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处放置了一个断点;它永远也达不到。之后的所有内容也不会加载。有任何想法吗?

4

3 回答 3

0

如果该文件是您的内容项目的一部分,并且它的 Build Action 设置为 Compile,则运行时该文件夹中的文件没有 .png 扩展名,因此永远不会创建位图。内容资产具有 .xnb 扩展名,因为它们已被编译为二进制格式。将 Build Action 更改为 None 并将 Copy to Output Direction 更改为 Copy(如果较新)

于 2012-08-20T13:40:39.793 回答
0

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

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

于 2012-08-08T04:55:59.200 回答
0

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

于 2012-08-08T21:52:14.973 回答