tiffbitmapdecoder.frames에서 tiff 페이지를 검색 할 수 없습니다 - 모든 프레임은 페이지 1입니다.
-
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);
}
제휴하지 않습니다 StackOverflow