Что я вижу из быстрого взгляда:
Потоки должны быть обернуты в с использованием шаблона (...) , в вашем случае, если во время обработки возникнет исключение, Dispose () не будет вызываться.
using (FileStream fs = new FileStream(FilePath, FileMode.Open))
{
// Another small optimization, removed unnecessary variable
byte[] iba = new byte[(int)fs.Length];
fs.Read(iba, 0, iba.Length);
}
Вы должны ловить только те исключения, которые ожидаете. Например, в SerializeImage это будет IOException . Поймать все исключения - очень плохая практика.
}
catch (IOException ex)
{
Метод Image.FromStream зависит от потока, поэтому, если вы закроете основной поток и вернете Image, вы можете получить непредсказуемое поведение (в большинстве случаев это будет работать, но иногда возникает ошибка). Поэтому вам нужно создать копию изображения и вернуть его.
using (MemoryStream ms = new MemoryStream(ImageByteArray))
{
using (Image img = Image.FromStream(ms))
{
return new Bitmap(img);
}
}
Вы не располагаете графический объект и объект img в методе SaveImage (но располагаете ImageObject, см. Следующий абзац). И вообще я не вижу необходимости в такой логике, просто вызовите ImageObject.Save (..., ImageFormat.Png), если вы хотите сохранить изображение с сохранением качества.
В этом же методе (SaveImage) вы располагаете параметр ImageObject. Это также плохая практика в большинстве случаев, рассмотрите возможность удаления этого изображения вне рабочего метода, используя , используя (...) pattern.