Rgb 565 Pdf to Image

问题描述 投票:0回答:1

我正在尝试将Pdf页面转换为图像。创建缩略图。

       PdfRenderer pdfRenderer = new PdfRenderer(GetSeekableFileDescriptor(filePath));

        var appDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
        string fileName = System.IO.Path.GetFileNameWithoutExtension(filePath);
        string directoryPath = System.IO.Path.Combine(appDirectory, "thumbnailsTemp", System.IO.Path.GetFileNameWithoutExtension(fileName));

        if (!Directory.Exists(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);

            int pageCount = pdfRenderer.PageCount;

            for (int i = 0; i < pageCount; i++)
            {
                Page page = pdfRenderer.OpenPage(i);
                Android.Graphics.Bitmap bmp = Android.Graphics.Bitmap.CreateBitmap(page.Width, page.Height, Android.Graphics.Bitmap.Config.Rgb565 or Argb8888);
                page.Render(bmp, null, null, PdfRenderMode.ForDisplay);

                try
                {
                    using (FileStream output = new FileStream(System.IO.Path.Combine(directoryPath, fileName + "Thumbnails" + i + ".png"), FileMode.Create))
                    {
                        bmp.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, output);
                    }

                    page.Close();
                }
                catch (Exception ex)
                {
                    //TODO -- GERER CETTE EXPEXPTION
                    throw new Exception();
                }
            }

            return directoryPath;
        }

我尝试使用argb 8888,那是成功的。但是对于大的pdf文件,渲染时间太慢。这就是为什么我试图使用rgb 565来增加渲染时间,但是我的应用程序因该Execption而崩溃:

非支持像素格式

任何解决此问题或更快地将pdf渲染为位图的想法。我在Google上搜索,但未找到与我的代码相关的解决方案。

xamarin xamarin.forms xamarin.android
1个回答
0
投票

您可以通过将PDF页面转换为位图来在应用程序中绘制PDF页面,此处PDF文档本身是作为资源嵌入的。

var assembly = Assembly.GetExecutingAssembly();
var stream = new MemoryStream();
using (Stream resourceStream = assembly.GetManifestResourceStream("DrawPdf.Android.tiger.pdf"))
{
  resourceStream.CopyTo(stream);
}
Page page = new Page(stream, 0);

// render PDF Page object to a Bitmap
byte[] bytes = null;
await Task.Run(() =>
{
   bytes = page.AsPNG(72);
});
Bitmap bmp = global::Android.Graphics.BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length);
© www.soinside.com 2019 - 2024. All rights reserved.