tiffbitmapdecoder.frames에서 tiff 페이지를 검색 할 수 없습니다 - 모든 프레임은 페이지 1입니다.

StackOverflow https://stackoverflow.com/questions/830386

  •  06-07-2019
  •  | 
  •  

문제

Multipage TIFF 이미지를 Multipage XPS 문서로 변환하려고합니다. 내가 가진 문제는 TiffbitmapDecoder와 BitMapFrames와 관련이 있습니다.

코드는 다음과 같습니다.

private static void ToXpsDocument(string imageName, string xpsName)
{
    using (var p = Package.Open(xpsName))
    {
        PackageStore.AddPackage(new Uri("pack://thedocloljk.xps"), p);
        XpsDocument doc = new XpsDocument(p);
        var writer = XpsDocument.CreateXpsDocumentWriter(doc);
        var dec = new TiffBitmapDecoder
                          (new Uri(imageName),
                          BitmapCreateOptions.IgnoreImageCache,
                          BitmapCacheOption.None);

        var fd = new FixedDocument();
        foreach (var frame in dec.Frames)
        {
            var image = new System.Windows.Controls.Image();
            image.Source = frame;
            var fp = new FixedPage();
            fp.Children.Add(image);
            fp.Width = frame.Width;
            fp.Height = frame.Height;
            var pc = new PageContent();
            (pc as IAddChild).AddChild(fp);
            fd.Pages.Add(pc);
        }
        writer.Write(fd);
        p.Flush();
        p.Close();
        PackageStore.RemovePackage(new Uri("pack://thedocloljk.xps"));
    }
}

이로 인해 올바른 수의 페이지가있는 XPS가 발생합니다. 그러나 모든 페이지는 TIFF의 첫 페이지의 복제본입니다. 사실, 단일 프레임 (예 : 12 월 프레임 [4])을 골라 디스크에 쓰면 첫 페이지처럼 보입니다.

내가 여기서 무슨 일이 일어나고 있습니까? 프레임은 실제로 이미지의 개별 페이지가 아닌가? 어떻게 그들을 꺼내서 그들과 함께 일할 수 있습니까 ???

도움이 되었습니까?

해결책

다음 코드를 사용해보십시오 (주석된 줄은 버전과 다릅니다) :

foreach (var frameSource in dec.Frames) // note this line
{
    var frame = BitmapFrame.Create(frameSource); // and this line
    var image = new System.Windows.Controls.Image(); 
    image.Source = frame; 
    var fp = new FixedPage(); 
    fp.Children.Add(image); 
    fp.Width = frame.Width; 
    fp.Height = frame.Height; 
    var pc = new PageContent(); 
    (pc as IAddChild).AddChild(fp); 
    fd.Pages.Add(pc); 
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top