我创建了与开关图像的图片框一起使用的迷你游戏。我用它来换。我通常使用最多30张图片用于app。
解释
class UnikatniHodnoty
{
public static List<Button> buttonList = new List<Button>();
public static List<string> uhodnuteObrazky = new List<string>();
public static bool security = false;
public static string pocetPokusu;
public static string casNaObrazky;
public static string casNaTah;
public static string bodyKVitestvi;
}
这是我从文件加载图片的脚本:
class nacteniSouboru
{
string obrazky;
string zadniKarta;
string zadniStrana;
public string hledanyObrazek;
public List<string> obrazkyList = new List<string>();
public List<string> obrazkyListControl = new List<string>();
public nacteniSouboru()
{
// Cesty k souborům
var currentDirectory = Directory.GetCurrentDirectory();
obrazky = currentDirectory + @"\vse\";
zadniStrana = currentDirectory + @"\zadniStrana\";
// Základní hodnota
zadniKarta = "";
}
public void nacteniObrazku()
{
var listOfFiles = new List<string>();
string[] fileEntries = Directory.GetFiles(obrazky);
foreach (string fileName in fileEntries)
listOfFiles.Add(fileName);
Random random = new Random();
for (int i = 0; obrazkyList.Count < 15; i++)
{
int index = random.Next(0, listOfFiles.Count - 1);
if (!obrazkyList.Contains(listOfFiles[index]))
{
obrazkyList.Add(listOfFiles[index]);
obrazkyListControl.Add(listOfFiles[index]);
}
}
}
public void zobrazeniObrazku()
{
int i = 0;
foreach (Button bTn in UnikatniHodnoty.buttonList)
{
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(obrazkyList[i++]);
}
}
public void nacteniHledanehoObrazku(PictureBox picture)
{
Random random = new Random();
foreach (string obrazky in UnikatniHodnoty.uhodnuteObrazky)
obrazkyListControl.Remove(obrazky);
int index = random.Next(0, obrazkyListControl.Count - 1);
hledanyObrazek = obrazkyListControl[index];
if (picture.BackgroundImage != null)
picture.BackgroundImage.Dispose();
picture.BackgroundImage = Image.FromFile(obrazkyListControl[index]);
}
public void nacteniZadniStrany()
{
string[] fileEntries = Directory.GetFiles(zadniStrana);
foreach (string fileName in fileEntries)
zadniKarta = fileName;
foreach (Button bTn in UnikatniHodnoty.buttonList)
{
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.Text = "";
bTn.BackgroundImage = Image.FromFile(zadniKarta);
}
}
}
你可以帮我解决每个开关图像后如何清理内存不足的问题,因为每隔30秒就会调用一次此功能。
这是切换图片的脚本:
private void obrazek_Click(object sender, EventArgs e)
{
Button bTn = new Button();
bTn = (Button)sender;
timeTah.Enabled = false;
switch (bTn.Name)
{
case "picture_0_0":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[0]);
if (soubor.obrazkyList[0] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[0]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_0_1":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[1]);
if (soubor.obrazkyList[1] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[1]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_0_2":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[2]);
if (soubor.obrazkyList[2] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[2]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_0_3":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[3]);
if (soubor.obrazkyList[3] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[3]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_0_4":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[4]);
if (soubor.obrazkyList[4] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[4]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_1_0":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[5]);
if (soubor.obrazkyList[5] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[5]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_1_1":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[6]);
if (soubor.obrazkyList[6] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[6]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_1_2":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[7]);
if (soubor.obrazkyList[7] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[7]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_1_3":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[8]);
if (soubor.obrazkyList[8] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[8]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_1_4":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[9]);
if (soubor.obrazkyList[9] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[9]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_2_0":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[10]);
if (soubor.obrazkyList[10] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[10]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_2_1":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[11]);
if (soubor.obrazkyList[11] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[11]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_2_2":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[12]);
if (soubor.obrazkyList[12] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[12]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_2_3":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[13]);
if (soubor.obrazkyList[13] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[13]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
case "picture_2_4":
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(soubor.obrazkyList[14]);
if (soubor.obrazkyList[14] == soubor.hledanyObrazek)
{
UnikatniHodnoty.uhodnuteObrazky.Add(soubor.obrazkyList[14]);
uspechNaObrazku(sender, e);
}
else
neuspechNaObrazku(sender, e);
break;
}
soubor.nacteniZadniStrany();
}
问题:
加载图片后游戏仍然崩溃,或者我添加了一些新图像到文件。如果游戏崩溃,那么它的书面崩溃就会导致“内存不足”和#34;没有更多,而不是在哪里。请帮忙。
错误:
**************例外文字**************
System.OutOfMemoryException: Out of memory
in System.Drawing.Image.FromFile (String filename, Boolean useEmbeddedColorManagement)
in System.Drawing.Image.FromFile (String filename)
in gameCards.soubory.nacteniSouboru.zobrazeniObrazku () d: \ Program \ gameCards \ gameCards \ files \ nacteniSouboru.cs: line 60
in gameCards.gameCard.spustit_Click (Object sender, EventArgs e) in d: \ Program \ gameCards \ gameCards \ gameCards.cs: line 49
in System.Windows.Forms.Control.OnClick (EventArgs e)
in System.Windows.Forms.Button.OnClick (EventArgs e)
in System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent)
in System.Windows.Forms.Control.WmMouseUp (Message & m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc (Message & m)
in System.Windows.Forms.ButtonBase.WndProc (Message & m)
in System.Windows.Forms.Button.WndProc (Message & m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m)
in System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
public void zobrazeniObrazku() // When i use this code so it sent me upper errors.
{
int i = 0;
foreach (Button bTn in UnikatniHodnoty.buttonList)
{
if (bTn.BackgroundImage != null)
bTn.BackgroundImage.Dispose();
bTn.BackgroundImage = Image.FromFile(obrazkyList[i++]);
}
}