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; 处放置了一个断点,但它没有到达它。之后的所有东西都没有加载。有什么想法吗?
答案 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,因为它们已编译为二进制格式。将构建操作更改为无,将复制到输出方向更改为复制