У меня возникли проблемы при попытке сохранить многостраничное изображение в формате tiff в MemoryStream. Я видел много материалов о том, как сохранить многостраничный TIFF, но все примеры сохраняют изображение в файл, а не в MemoryStream.
Когда я сохраняю в файл, это работает как и ожидалось (давая мне три страницы в формате tiff на диске). Однако, когда я пытаюсь сохранить в MemoryStream, а затем взять этот MemoryStream и сохранить в файл, я получаю только первую страницу.
Вот то, что у меня есть сейчас, и это только в конце концов давая мне первую страницу.
// Get the tiff image codec
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().Where(c => c.MimeType == "image/tiff").First();
if (codec == null)
throw new Exception("Tiff codec not found.");
// Create compression encoder parameter
EncoderParameter compressionParam = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
// Create first page frame parameter
EncoderParameter firstFrameParam = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
// Create additional pages frame parameter
EncoderParameter additionalFramesParam = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
// Create color depth parameter
EncoderParameter colorDepthParam = new EncoderParameter(Encoder.ColorDepth, (long)1);
// Create flush parameter
EncoderParameter flushParam = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.Flush);
// Create first page encoder parameters
EncoderParameters firstFrameParams = new EncoderParameters(2)
{
Param = new EncoderParameter[]
{
compressionParam,
firstFrameParam,
}
};
// Create additional pages encoder parameters
EncoderParameters additionalFrameParams = new EncoderParameters(2)
{
Param = new EncoderParameter[]
{
compressionParam,
additionalFramesParam,
}
};
// Create save to file encoder parameters
EncoderParameters saveToFileParams = new EncoderParameters(2)
{
Param = new EncoderParameter[]
{
compressionParam,
colorDepthParam,
}
};
// Create flush encoder parameters
EncoderParameters flushParams = new EncoderParameters(1)
{
Param = new EncoderParameter[]
{
flushParam,
}
};
// Save the bitmap to memory as tiff
MemoryStream byteStream = new MemoryStream();
_imageCache[0].Save(byteStream, ImageFormat.Tiff);
// Put Tiff into another Image object
Image tiff = Image.FromStream(byteStream);
// Save to file - this will work fine
// tiff.Save(@"c:\test\test.tif", codec, firstFrameParams);
// Save to a memory stream
MemoryStream tiffStream = new MemoryStream();
tiff.Save(tiffStream, codec, firstFrameParams);
// For subsequent pages, prepare encoders
for (int page = 1; page < _imageCache.Count; page++)
tiff.SaveAdd(_imageCache[page], additionalFrameParams);
// Finally flush the file
tiff.SaveAdd(flushParams);
// Save the image in memory to a file
Image tiffOutput = Image.FromStream(tiffStream);
tiffOutput.Save(@"c:\test\test.tif", codec, saveToFileParams);
Подробнее здесь: https://stackoverflow.com/questions/791 ... ory-stream
Как сохранить многостраничное изображение в формате Tiff в поток памяти? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Многостраничное настольное приложение в Авалонии выдает ошибку недопустимого потока
Anonymous » » в форуме C# - 0 Ответы
- 90 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как создать многостраничное приложение с каждой страницей в отдельном модуле
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-