| 89 | } |
| 90 | |
| 91 | QImage PdfiumComic::getPage(const int page) |
| 92 | { |
| 93 | if (!doc) { |
| 94 | return QImage(); |
| 95 | } |
| 96 | |
| 97 | QImage image; |
| 98 | FPDF_PAGE pdfpage; |
| 99 | FPDF_BITMAP bitmap; |
| 100 | |
| 101 | QMutexLocker locker(&pdfmutex); |
| 102 | pdfpage = FPDF_LoadPage(doc, page); |
| 103 | |
| 104 | if (!pdfpage) { |
| 105 | // TODO report error |
| 106 | qDebug() << FPDF_GetLastError(); |
| 107 | return QImage(); |
| 108 | } |
| 109 | |
| 110 | const QSize pagesize = YACReaderPdfRender::renderSizeFromPagePoints(QSizeF(FPDF_GetPageWidth(pdfpage), |
| 111 | FPDF_GetPageHeight(pdfpage))); |
| 112 | if (!pagesize.isValid()) { |
| 113 | FPDF_ClosePage(pdfpage); |
| 114 | return QImage(); |
| 115 | } |
| 116 | |
| 117 | image = QImage(pagesize, QImage::Format_ARGB32); // QImage::Format_RGBX8888); |
| 118 | if (image.isNull()) { |
| 119 | // TODO report OOM error |
| 120 | qDebug() << "Image too large, OOM"; |
| 121 | return image; |
| 122 | } |
| 123 | image.fill(0xFFFFFFFF); |
| 124 | |
| 125 | bitmap = FPDFBitmap_CreateEx(image.width(), image.height(), FPDFBitmap_BGRA, image.scanLine(0), image.bytesPerLine()); |
| 126 | // TODO: make render flags costumizable |
| 127 | FPDF_RenderPageBitmap(bitmap, pdfpage, 0, 0, image.width(), image.height(), 0, (FPDF_LCD_TEXT)); |
| 128 | FPDFBitmap_Destroy(bitmap); |
| 129 | FPDF_ClosePage(pdfpage); |
| 130 | return image; |
| 131 | } |
| 132 | #endif // USE_PDFIUM |
no test coverage detected