PDFium Сохранение PDF как изображение указать глубину цвета - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь экспортировать PDF-файлы в формате JPEG с использованием программы просмотра PDF. Как я могу указать глубину цвета изображения JPEG? Нужно ли мне редактировать поток с помощью System.Drawing.Imaging или может кто-нибудь знает способ сделать это с pdfium? https://github.com/pvginkel/PdfiumViewer - это то, что я использую для рендеринга PDF и создания изображения.

 using (var document = PdfiumViewer.PdfDocument.Load(file.ToString()))
                    {
                        for (int page = 0; page < document.PageCount; page++)
                        {
                            var image = document.Render(page, 2550, 3300, 72, 72, false);

                            image.Save(filepath + "\\" + filename + "-" + (page + 1) + ".jpg", ImageFormat.Jpeg);

                        }
                    }

1 Ответ

0 голосов
/ 05 октября 2019

Необходимо установить свойства кодировщика изображения, чтобы изменить их. Это показывает от удара до удара, но объясняет, что я искал.

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Example_SetColorDepth
{
    public static void Main()
    {
        Bitmap myBitmap;
        ImageCodecInfo myImageCodecInfo;
        Encoder myEncoder;
        EncoderParameter myEncoderParameter;
        EncoderParameters myEncoderParameters;

        // Create a Bitmap object based on a BMP file.
        myBitmap = new Bitmap(@"C:\Documents and Settings\All Users\Documents\My Music\music.bmp");

        // Get an ImageCodecInfo object that represents the TIFF codec.
        myImageCodecInfo = GetEncoderInfo("image/tiff");

        // Create an Encoder object based on the GUID
        // for the ColorDepth parameter category.
        myEncoder = Encoder.ColorDepth;

        // Create an EncoderParameters object.
        // An EncoderParameters object has an array of EncoderParameter
        // objects. In this case, there is only one
        // EncoderParameter object in the array.
        myEncoderParameters = new EncoderParameters(1);

        // Save the image with a color depth of 24 bits per pixel.
        myEncoderParameter =
            new EncoderParameter(myEncoder, 24L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        myBitmap.Save("Shapes24bpp.tiff", myImageCodecInfo, myEncoderParameters);
    }

    private static ImageCodecInfo GetEncoderInfo(String mimeType)
    {
        int j;
        ImageCodecInfo[] encoders;
        encoders = ImageCodecInfo.GetImageEncoders();
        for(j = 0; j < encoders.Length; ++j)
        {
            if(encoders[j].MimeType == mimeType)
                return encoders[j];
        }
        return null;
    }
}
...