Фрагмент кода правильный (хотя MemoryStream
реализует IDisposable
и поэтому должен быть заключен в блок using
).
Image.FromStream выдает ArgumentException
, только если он не распознает формат изображения в потоке. Поэтому, если какой-то код не отображается, проблема должна быть связана с самим изображением.
Чтобы убедиться в правильности кода, используйте следующую тестовую программу для реального файла образа, находящегося где-то на вашем жестком диске:
string imageBase64;
using (Image image = Image.FromFile(@"C:\path_to_image.jpg"))
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Jpeg);
imageBase64 = Convert.ToBase64String(ms.ToArray());
}
}
Console.WriteLine(imageBase64.Length);
byte[] imageData = Convert.FromBase64String(imageBase64);
using (MemoryStream ms = new MemoryStream(imageData))
{
using (Image image = Image.FromStream(ms))
{
Console.WriteLine(image.Width);
}
}