Полю нигде не присваивается значение, поэтому оно всегда будет иметь значение 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;
}