【发布时间】:2021-06-11 06:07:11
【问题描述】:
我直接使用 QPrinter(设置为 HighResolution)生成 PDF 文档,在其中我使用 QPainter::drawImage() 绘制几个像素图像 QImage。
图片尺寸非常小(大约 200x50 像素),只有 3 种颜色。我使用较大的 QRect 作为边界框在 PDF 中放大它们。
QImage 本身没有缩放。
我希望 PDF 中的图像清晰明了,但是,它们显示缩放伪影的方式与糟糕的 jpg 相同。 (我想要一种 png 代替...)。
如何防止这种情况发生?是 QPainter 还是 QPrinter 的问题? 图像压缩的问题?还是 PDF 查看器?
QImage* image;
//...
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFileName("/home/xxx/test.pdf");
printer.setOutputFormat(QPrinter::PdfFormat);
QPainter painter;
painter.begin(&printer);
const int SCALING = 30;
QRect imageFrame = image->rect(); // <-- here comes my QImage
imageFrame.setSize( imageFrame.size() * SCALING );
painter.drawImage( imageFrame, *image );
//...
painter.end();
编辑:一个澄清的例子 这是 QImage 在屏幕上的样子:
当我将此图像放入 pdf 时,它看起来像这样,因此带有典型的 jpg 伪影。这张图片的bounding box被放大到可以详细看到内容,但是使用的QImage是1:1的(即文本像素之一是图片中的一个像素)。
当我将图像本身放大 4 倍然后将其放入 pdf (即 QImage 中的每个文本像素是 4x4 像素)时,它看起来像这样。更接近我想要的,但图片数据更大,文件大小更多。
我的问题是如何使用原始(小)QImage,它在 PDF 中以绝对清晰的像素方块显示,没有这些伪影。
【问题讨论】:
标签: c++ image qt pdf image-compression