我正在尝试为pdf文件实现日/夜模式;渲染后。 这样做的最佳解决方案是什么?可以通过在Windows应用商店中使用主题来完成吗?
答案 0 :(得分:0)
Venkata也posted on the MSDN forums,在那里他澄清说他正在使用PdfDocument API并想要将白色转换为黑色和黑色转换为白色。如果你这样做,请确保考虑高对比度模式(我只是跳过你在高对比度模式下的反转,因为用户已经管理过了)。
您可以在传递给RenderToStreamAsync的PdfPageRenderOptions中设置页面背景(如果您正在使用IPdfRendererNative和RenderPageToSurface,则可以设置PDF_RENDER_PARAMS,但是没有办法覆盖该级别的前景。
将页面渲染到离屏位图后,您可以编辑其像素。例如,您可以将其加载到WriteableBitmap中,然后遍历像素并反转颜色:
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///assets/demo.pdf"));
PdfDocument pdfDoc = await PdfDocument.LoadFromFileAsync(file);
PdfPage pdfPage = pdfDoc.GetPage(0);
using (IRandomAccessStream stream = new InMemoryRandomAccessStream())
{
PdfPageRenderOptions options = new PdfPageRenderOptions();
await pdfPage.RenderToStreamAsync(stream, options);
WriteableBitmap wb = new WriteableBitmap((int)pdfPage.Size.Height, (int)pdfPage.Size.Width);
await wb.SetSourceAsync(stream);
using (Stream pixels = wb.PixelBuffer.AsStream())
{
pixels.Seek(0, SeekOrigin.Begin);
for (int i = 0; i < pixels.Length; i++)
{
byte subPixel = (byte)pixels.ReadByte();
// WB pixels are RGBA. Only change RGB, not A
if ((i + 1) % 4 != 0)
{
// write over the same pixel we just read
pixels.Seek(-1, SeekOrigin.Current);
// write the modified pixel (inverted colour in this case)
pixels.WriteByte((byte)(byte.MaxValue - subPixel));
}
}
}
// Display the page on an Image in our Xaml Visual Tree
img.Source = wb;
}