Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Переполнение памяти при загрузке изображения


Автор: AGENTxXx 1.4.2016, 11:46
Всем привет!

Столкнулся с интересной проблемой - не могу открыть по виду обычный файл...

Вот код:
Код

imageList1.Images.Add(Image.FromFile(file.FullName));


Пробовал и так:
Код

Bitmap bitmap = (Bitmap)Image.FromFile(file.FullName); //Тут ошибка переполнения


И даже так:
Код

var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read);
var img = Image.FromStream(fs); // Тут ошибка в передаваемом параметре
fs.Dispose();


Прикрепить файл не удалось, т.к. больше 1 мегабайта. Вот, ссылка:
prokoder.ru/1448.rar

Из найденных моментов - например paint тоже не может открыть этот файл, хотя редакторы просмотра - без проблем. Определил косяк - из за формата цветок CMYK. Но изменить формат нельзя. Нужно как-то с ним работать. Может кто знает...

Был бы рад за ваши ответы.

Автор: sgrey 2.4.2016, 05:46
Tiff надо читать через свой класс https://msdn.microsoft.com/en-us/library/aa969817%28v=vs.100%29.aspx

Автор: AGENTxXx 22.4.2016, 11:47
Цитата(sgrey @ 2.4.2016,  05:46)
Tiff надо читать через свой класс https://msdn.microsoft.com/en-us/library/aa969817%28v=vs.100%29.aspx

Спасибо за ответ!
Я реализовал следующим образом:
Код

Stream imageStream = new
FileStream(@"1.tif", FileMode.Open, FileAccess.Read, FileShare.Read);
BitmapSource myBitmapSource = BitmapFrame.Create(imageStream);

FormatConvertedBitmap newFormatedBitmapSource = new FormatConvertedBitmap();
newFormatedBitmapSource.BeginInit();
newFormatedBitmapSource.Source = myBitmapSource;

newFormatedBitmapSource.EndInit();

TiffBitmapEncoder encoder2 = new TiffBitmapEncoder();
encoder2.Compression = TiffCompressOption.None;
BitmapEncoder encoder = encoder2;

encoder.Frames.Add(BitmapFrame.Create(newFormatedBitmapSource));
Stream cmykStream = new FileStream(@"mike4_CMYK.tif",

FileMode.Create, FileAccess.Write, FileShare.Write);
encoder.Save(cmykStream);
cmykStream.Close();


К сожалению с глубиной так и не смог решить проблему, но, как оказалось - этого и не надо было в итоге. Ребята, которым нужно было сделать, перепутали изображения и нужно было работать с tiff и RGB 24х битным. В итоге всё нормально получилось. Но было бы здорово, если кто-то всё же знает, как решить эту проблему

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)