我正在为UWP使用Xfinium.PDF组件。我需要显示一个用ISF编码为GIF的图像(这里有更多信息:https://docs.microsoft.com/en-us/windows/uwp/input-and-devices/save-and-load-ink)。我只有一个字节流,而不是物理图像。
当我使用PdfFlowDocument时,我需要实例化一个PdfFlowTableImageCell。
我怎么能做到这一点?
答案 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());