Пока даже не очень понял в чем тут проблема, но нашел как решить.
Имею Image, который сохраняю в файл и загружаю из файла.
Сохраняю:
using (MemoryStream ms = new MemoryStream())
{
this.bitmap.Save(ms, ImageFormat.Bmp);
byte[] bitmapData = ms.ToArray();
string imgBase64 = Convert.ToBase64String(bitmapData);
xmlImage.InnerText = imgBase64;
}
Загружаю:
string imgBase64 = xmlImage.InnerText;
if (!string.IsNullOrEmpty(imgBase64))
byte[] bitmapData = Convert.FromBase64String(imgBase64);
using (MemoryStream ms = new MemoryStream(bitmapData))
this.bitmap = Image.FromStream(ms) as Bitmap;
Все работает без проблем - bitmap отображается как нужно, размеры сохранены
и вообще все отлично.
Но если попытаться сохранить этот загруженный image еще раз,
то получаю ошибку:
A generic error occurred in GDI+.
Что сие значит не понятно.
Решил проблему просто, но не понятно - либо не закрывать поток,
либо создавать новый image, соответственно с новым потоком.
Т.е. либо так:
MemoryStream ms = new MemoryStream(bitmapData);
this.bitmap = Image.FromStream(ms) as Bitmap;
Либо так:
this.bitmap = new Bitmap(Image.FromStream(ms) as Bitmap);
Первый вариант мне не нравится, прямо душу режет.
Второй еще пережить можно, хотя не понятно почему и в чем проблема.
UPD: Т.е. получается что при выполнении FromStream используется тот же буфер, что
я создавал в потоке.
UPD: Интересно этот редактор параграфы переставляет. Вроде сохраняешь
нормально, а получается такая каша... Хоть бы пофиксили. Задолбало.
No comments:
Post a Comment