Ответ 1
Reset Position
от ms
до 0 после его заполнения:
enc.Save(ms);
ms.Position = 0;
ms.CopyTo(allFrameStream);
Копирование начинается с текущей позиции в текущем потоке
TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
using (MemoryStream allFrameStream = new MemoryStream())
{
foreach (BitmapFrame frame in decoder.Frames)
{
using (MemoryStream ms= new MemoryStream())
{
JpegBitmapEncoder enc = new JpegBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(frame));
enc.Save(ms);
ms.CopyTo(allFrameStream);
}
}
Document documentPDF = new Document();
PdfWriter writer = PdfWriter.GetInstance(documentPDF, allFrameStream);
}
Всегда allFrameStream Length=0
. Но на каждой итерации я мог видеть ms.Length=989548
. Какая ошибка в моем коде. почему ms.CopyTo(allFrameStream)
не работает?
Reset Position
от ms
до 0 после его заполнения:
enc.Save(ms);
ms.Position = 0;
ms.CopyTo(allFrameStream);
Копирование начинается с текущей позиции в текущем потоке
Попробуйте выполнить allFrameStream.Position = 0;
непосредственно перед записью в PDF.
После записи в ms
позиция ms
находится в конце. Вы должны искать начало потока, например. с:
ms.Seek(0,System.IO.SeekOrigin.Begin);
После этого ms.CopyTo
работает правильно.