#vb.net #gdi #zipfile
#vb.net #gdi #zip
Вопрос:
Я не уверен, что я делаю не так с приведенным ниже примером кода.
Я не получаю никаких ошибок, и изображение выглядит так после применения сжатия:
Using _stm = _ZipArchiveEntry.Open
Dim _ims = New MemoryStream
Image.FromStream(_stm, True, True).Save(_ims, _codec, params)
_stm.Seek(0, SeekOrigin.Begin)
_stm.SetLength(_ims.Length)
_ims.CopyTo(_stm)
End Using
ПРИМЕЧАНИЕ: если я записываю изображение на диск, оно работает. Я бы хотел избежать удаления и повторной вставки записей zip-архива.
Using _stm = _ZipArchiveEntry.Open
Image.FromStream(_stm, True, True).Save("C:test.jpeg", _codec, params)
End Using
Комментарии:
1. Можете ли вы сохранить поток памяти «_ims» на диск и сравнить файл с тем, который вы сохраняете непосредственно во втором примере?
2. Я понял это. Я забыл сбросить позицию в _ims обратно на 0.
Ответ №1:
Я забыл сбросить позицию потока «_ims» обратно на 0. Печальная часть, я предположил.CopyTo() сделал бы это за меня. Так что это было последнее, что я действительно проверил…
Это сработало:
Using _stm = p_ZipArchiveEntry.Open
Using _ims As New MemoryStream
Image.FromStream(_stm, True, True).Save(_ims, _codec, params)
_stm.SetLength(_ims.Length)
_stm.Seek(0, SeekOrigin.Begin)
_ims.Seek(0, SeekOrigin.Begin)
_ims.CopyTo(_stm)
End Using
End Using