Xfinium.PDF PdfFlowDocument中的GIF / ISF图像

时间:2017-07-27 19:28:59

标签: c# pdf uwp gif

我正在为UWP使用Xfinium.PDF组件。我需要显示一个用ISF编码为GIF的图像(这里有更多信息:https://docs.microsoft.com/en-us/windows/uwp/input-and-devices/save-and-load-ink)。我只有一个字节流,而不是物理图像。

当我使用PdfFlowDocument时,我需要实例化一个PdfFlowTableImageCell。

我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

您必须使用BitmapDecoder / BitmapEncoder UWP类将GIF图像转换为PNG(或JPEG),然后创建可在PdfFlowTableImageCell中使用的PdfPngImage(或PdfJpegImage)。

更新:下面的代码显示了如何在UWP中将GIF图像转换为PNG(假设您的GIF图像位于流中):

// Stream gifStream = your image stream
BitmapDecoder gifDecoder = 
    await BitmapDecoder.CreateAsync(gifStream.AsRandomAccessStream());
BitmapFrame gifFrame = await gifDecoder.GetFrameAsync(0);
PixelDataProvider gifPixels = await gifFrame.GetPixelDataAsync();

InMemoryRandomAccessStream pngStream = new InMemoryRandomAccessStream();
BitmapEncoder pngEncoder = 
    await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, pngStream);
pngEncoder.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Straight, 
    gifFrame.PixelWidth, gifFrame.PixelHeight, 
    96, 96, gifPixels.DetachPixelData()); 
await pngEncoder.FlushAsync();
pngStream.Seek(0);

PdfPngImage pngImage = new PdfPngImage(pngStream.AsStream());