Eps_Page * eps_page_new (const Eps_Document *document) { Eps_Page *page; SpectreStatus status; if (!document) return NULL; page = (Eps_Page *)malloc (sizeof (Eps_Page)); if (!page) return NULL; page->document = document->ps_doc; page->page = spectre_document_get_page(document->ps_doc, 0); status = spectre_page_status (page->page); if (status != SPECTRE_STATUS_SUCCESS) { printf ("[eps] %s\n", spectre_status_to_string (status)); free (page); return 0; } page->rc = spectre_render_context_new (); if (!page->rc) { free (page); return NULL; } spectre_render_context_set_rotation (page->rc, 0); spectre_render_context_set_scale (page->rc, 1.0, 1.0); return page; }
void eps_page_scale_set (const Eps_Page *page, double hscale, double vscale) { if (!page) return; spectre_render_context_set_scale (page->rc, hscale, vscale); }
QImage EpsRenderer::renderToImage(const QUrl& url, QSizeF* size) { #ifdef LIBSPECTRE_FOUND SpectreDocument* doc = spectre_document_new(); SpectreRenderContext* rc = spectre_render_context_new(); qDebug() << "rendering eps file: " << url; QByteArray local_file = url.toLocalFile().toUtf8(); spectre_document_load(doc, local_file.data()); int wdoc, hdoc; qreal w, h; double scale; spectre_document_get_page_size(doc, &wdoc, &hdoc); if(m_useHighRes) { scale=1.2*4.0; //1.2 scaling factor, to make it look nice, 4x for high resolution w = 1.2 * wdoc; h = 1.2 * hdoc; } else { scale=1.8*m_scale; w = 1.8 * wdoc; h = 1.8 * hdoc; } qDebug()<<"scale: "<<scale; qDebug()<<"dimension: "<<w<<"x"<<h; unsigned char* data; int rowLength; spectre_render_context_set_scale(rc, scale, scale); spectre_document_render_full( doc, rc, &data, &rowLength); QImage img(data, wdoc*scale, hdoc*scale, rowLength, QImage::Format_RGB32); spectre_document_free(doc); spectre_render_context_free(rc); img = img.convertToFormat(QImage::Format_ARGB32); if (size) *size = QSizeF(w,h); return img; #else Q_UNUSED(url); Q_UNUSED(size); return QImage(); #endif }
QImage Document::RenderPage (int index, double xRes, double yRes) { auto page = spectre_document_get_page (SD_, index); auto rc = spectre_render_context_new (); auto size = GetPageSize (index); spectre_render_context_set_scale (rc, xRes, yRes); size.rwidth () *= xRes; size.rheight () *= yRes; unsigned char *data = 0; int rowLength = 0; spectre_page_render (page, rc, &data, &rowLength); spectre_render_context_free (rc); spectre_page_free (page); const QImage& img = rowLength == size.width () * 4 ? QImage (data, size.width (), size.height (), QImage::Format_RGB32) : QImage (data, rowLength / 4, size.height (), QImage::Format_RGB32) .copy (0, 0, size.width (), size.height ()); free (data); return img; }