Я получаю странную ошибку с Image.save(Stream, Format)
.
Я попытался найти решение, но все, кажется, считают, что ошибка связана с правами доступа к файлам.Это не может быть в моем случае, если поток не попадает в файл.Мой код ниже:
MemoryStream Stream = new MemoryStream();
this.Image_Box_1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Jpeg);
TI.AlbumCover = Stream.ToArray();
Stream.Close();
TI.AlbumCover
является byte[]
.
Кто-нибудь есть какие-либо идеи о том, что проблема может быть?
РЕДАКТИРОВАТЬ:
Хорошо, так что я решил это.Исходный файл может иногда приходить из файла jpg, иногда из байтового массива (часть тега id3).Проблема заключалась в том, что, когда изображение пришло из файла, я закрывал поток после создания изображения окна изображения.Хотя изображение оставалось видимым, данные больше не были доступны.
Поскольку мне позже понадобилось перезаписать этот jpg-файл, я не мог просто оставить файловый поток открытым, поэтому оставил остальную часть своего кода тем же.и изменил код для чтения из jpg следующим образом:
FileStream FS = new FileStream(File, FileMode.Open, FileAccess.Read);//Read in the jpg file
Image IMG = Image.FromStream(FS);//Create an image from the file data
MemoryStream MS = new MemoryStream();
IMG.Save(MS, System.Drawing.Imaging.ImageFormat.Jpeg);//Save the image data to a memory stream
byte[] temp = MS.ToArray();//Copy the image data to a byte array
//close the streams
MS.Close();
FS.Close();
return temp; //was originally returning an image
Затем, после выполнения этого кода, я изменяю код, который поместил изображение в поле изображения:
try
{
if (this.m_V2Tag.AlbumCover != null)
this.Image_Box_1.Image = Image.FromStream(new MemoryStream(this.m_V2Tag.AlbumCover));
//changed code
else
{
MemoryStream temp = new MemoryStream(this.getFolderJpg()); //create a memory stream from the byte[]. This stream can safely be left open.
this.Image_Box_1.Image = Image.FromStream(temp); // create image and assign it to the image box
}
}
catch
{
this.Image_Box_1.Image = null;
}