MemoryStream.CopyTo不工作

Bil*_*lla 14 .net c# io c#-4.0

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);
}
Run Code Online (Sandbox Code Playgroud)

总是allFrameStream的Length=0.但我可以看到每次迭代ms.Length=989548.我的代码中的错误是什么.为什么ms.CopyTo(allFrameStream)不工作?

dko*_*ozl 34

复位Positionms0您填写后:

enc.Save(ms);
ms.Position = 0;
ms.CopyTo(allFrameStream);
Run Code Online (Sandbox Code Playgroud)

Stream.CopyTo

复制从当前流中的当前位置开始


wdo*_*jos 6

allFrameStream.Position = 0;在写入PDF之前尝试执行.


小智 6

写入 后ms, 的位置ms在其末尾。您必须寻找流的开头,例如:

ms.Seek(0,System.IO.SeekOrigin.Begin);
Run Code Online (Sandbox Code Playgroud)

之后ms.CopyTo工作正常。