Полю нигде не присваивается значение, поэтому оно всегда будет иметь значение null - C#
Формулировка задачи:
Пишу программу которая должна png картинки преобразовывать в матрицу (матрица заносится в массив).Т.к. картинки имеют разный размер пришлось использовать List. Появилась Такая ошибка "Полю "PNGarray.ListIslands" нигде не присваивается значение, поэтому оно всегда будет иметь значение по-умолчанию null", и при запуске программы выдаёт исключение "ArgumentNullException: Путь не может быть неопределённым"
Листинг программы
- public static class PNGarray
- {
- #region Переменные
- private static string TempPath;
- private static string TempName;
- private static string DocPath;
- private static char PathSim = '\u005C';
- private static List<byte[,,]> ListIslands;
- private static byte[,,] islands;
- private static string[] PNGList;
- private static string[] TempList;
- private static uint[,] Sizes = { { 100, 100 } };
- private static byte NumberOfSizes = 1;
- private static byte counter = 0;
- private static string[] SizeCounter;
- private static uint Height;
- private static uint Width;
- private static byte Count;
- private static Bitmap png;
- private static System.Drawing.Color temp;
- struct Colors
- {
- public static System.Drawing.Color white = System.Drawing.Color.FromArgb(255, 255, 255, 255);
- public static System.Drawing.Color blue = System.Drawing.Color.FromArgb(255, 0, 162, 232);
- public static System.Drawing.Color green = System.Drawing.Color.FromArgb(255, 34, 177, 76);
- public static System.Drawing.Color gray = System.Drawing.Color.FromArgb(255, 127, 127, 127);
- public static System.Drawing.Color yellow = System.Drawing.Color.FromArgb(255, 255, 242, 0);
- public static System.Drawing.Color orange = System.Drawing.Color.FromArgb(255, 255, 127, 39);
- }
- #endregion
- #region Перегрузки функции Start
- public static List<byte[,,]> Start(string folder)
- {
- TempPath = System.IO.Path.GetTempPath() + folder;
- TempName = TempPath + PathSim + "temp";
- DocPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + PathSim + folder;
- GetTempList();
- GetPNGList();
- if (TempList != PNGList)
- {
- UpdateTemp();
- }
- ReadPNG();
- return ListIslands;
- }
- public static List<byte[,,]> Start(string folder, bool check)
- {
- TempPath = System.IO.Path.GetTempPath() + folder;
- TempName = TempPath + PathSim + "temp";
- DocPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + PathSim + folder;
- if (check)
- {
- CheckPaths(folder);
- }
- GetTempList();
- GetPNGList();
- if (TempList != PNGList)
- {
- UpdateTemp();
- }
- ReadPNG();
- return ListIslands;
- }
- public static List<byte[,,]> Start(string folder, byte numberofsizes, uint[,] sizes)
- {
- TempPath = System.IO.Path.GetTempPath() + folder;
- TempName = TempPath + PathSim + "temp";
- DocPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + PathSim + folder;
- NumberOfSizes = numberofsizes;
- Sizes = sizes;
- GetTempList();
- GetPNGList();
- if (TempList != PNGList)
- {
- UpdateTemp();
- }
- ReadPNG();
- return ListIslands;
- }
- public static List<byte[,,]> Start(string folder, bool check, byte numberofsizes, uint[,] sizes)
- {
- TempPath = System.IO.Path.GetTempPath() + folder;
- TempName = TempPath + PathSim + "temp";
- DocPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + PathSim + folder;
- NumberOfSizes = numberofsizes;
- Sizes = sizes;
- GetTempList();
- GetPNGList();
- if (check)
- {
- CheckPaths(folder);
- }
- if (TempList != PNGList)
- {
- UpdateTemp();
- }
- ReadPNG();
- return ListIslands;
- }
- #endregion
- #region Преобразование картинок
- static void ReadPNG()
- {
- FileStream TempStream = new FileStream(TempName, FileMode.Open);
- FileStream SizeCounterStream = new FileStream(TempPath + PathSim + "SizeCounter", FileMode.Open);
- StreamReader FromTemp = new StreamReader(TempStream);
- StreamReader FromSizeCounter = new StreamReader(SizeCounterStream);
- bool end = false;
- string Line;
- while (!end)
- {
- Line = FromSizeCounter.ReadLine();
- if (Line == "End.")
- {
- end = true;
- break;
- }
- SizeCounter = Line.Split('*');
- Height = Convert.ToUInt32(SizeCounter[0]);
- Width = Convert.ToUInt32(SizeCounter[1]);
- Count = Convert.ToByte(SizeCounter[2]);
- islands = null;
- islands = new byte[Count, Height, Width];
- for (byte z = 0; z < Count; z++)
- {
- png = new Bitmap(FromTemp.ReadLine());
- for (int i = 0; i < Height; i++)
- {
- for (int j = 0; j < Width; j++)
- {
- temp = png.GetPixel(i, j);
- if (temp == Colors.white)
- {
- islands[z, i, j] = 0;
- }
- else if (temp == Colors.blue)
- {
- islands[z, i, j] = 1;
- }
- else if (temp == Colors.gray)
- {
- islands[z, i, j] = 2;
- }
- else if (temp == Colors.orange)
- {
- islands[z, i, j] = 3;
- }
- else if (temp == Colors.green)
- {
- islands[z, i, j] = 4;
- }
- else if (temp == Colors.yellow)
- {
- islands[z, i, j] = 5;
- }
- else
- {
- islands[z, i, j] = 0;
- }
- }
- }
- }
- if (ListIslands == null)
- {
- ListIslands = new List<byte[,,]>() { islands };
- }
- else
- {
- ListIslands.Add(islands);
- }
- }
- }
- #endregion
- }
Решение задачи: «Полю нигде не присваивается значение, поэтому оно всегда будет иметь значение null»
textual
Листинг программы
- Line = FromSizeCounter.ReadLine();
- if (Line == "End.")
- {
- end = true;
- break;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д