C++ PDF中的Qt图像具有缩放瑕疵
我使用QPrinter(设置为高分辨率)直接生成PDF文档,在QPrinter中,我使用QPaint::drawImage()绘制一些像素图像 这些图像的大小非常小(约200x50像素),只有3种颜色。我在PDF中使用较大的QRect作为边界框放大它们 QImage本身没有缩放 我希望PDF中的图像清晰明了,但是,它们显示缩放瑕疵的方式与坏jpg相同。(我想要一种png来代替…) 我怎样才能防止这种情况?这是QPainter还是QPrinter的问题? 图像压缩的问题?还是PDF浏览器C++ PDF中的Qt图像具有缩放瑕疵,c++,image,qt,pdf,image-compression,C++,Image,Qt,Pdf,Image Compression,我使用QPrinter(设置为高分辨率)直接生成PDF文档,在QPrinter中,我使用QPaint::drawImage()绘制一些像素图像 这些图像的大小非常小(约200x50像素),只有3种颜色。我在PDF中使用较大的QRect作为边界框放大它们 QImage本身没有缩放 我希望PDF中的图像清晰明了,但是,它们显示缩放瑕疵的方式与坏jpg相同。(我想要一种png来代替…) 我怎样才能防止这种情况?这是QPainter还是QPrinter的问题? 图像压缩的问题?还是PDF浏览器 QIma
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*图像;
//...
QPrinter打印机(QPrinter::高分辨率);
printer.setOutputFileName(“/home/xxx/test.pdf”);
打印机.setOutputFormat(QPrinter::PdfFormat);
油漆工;
画师。开始(打印和打印);
常数整型=30;
QRect imageFrame=image->rect();// 我不知道你说的“我想要某种png”是什么意思。我的理解是,您似乎有200x50像素,并希望绘制6000x1500像素。这可能是由drawImage()和缩放算法完成的,这将产生模糊和其他小故障
如果要精确绘制,无论大小,都需要使用QPaint绘制基本体。例如,如果我写了以下内容:
QRadialGradient radialGrad(QPointF(100, 100), 100);
radialGrad.setColorAt(0, Qt::red);
radialGrad.setColorAt(0.5, Qt::blue);
radialGrad.setColorAt(1, Qt::green);
painter.setBrush(QBrush(radialGrad));
painter.drawEllipse(160, 100, 50, 50);
painter.drawRect(100, 100, 50, 50);
这就是我得到的:
请注意,我缩放了太多以至于您甚至无法在预览中看到形状。梯度仍然是完美的
我不是PDF专家,但QPainter可能使用光栅绘制图像,矢量绘制原语:。谢谢您的回答。请参阅我上面的编辑以获得澄清。我的观点不是要有平滑的渐变,而是相反的,清晰的像素。这个圆对我来说似乎很清晰。我还是不明白这个问题,对不起。您似乎有一个大小为(a,b)的QImage,并希望以相同的质量绘制大小为(a*30,b*30)的QImage。此外,您可能应该改为使用QPrinter::ScreenResolution进行测试。另一个值可能会在内部进行缩放。我没有矢量图像,也没有绘制到PDF-我插入了位图。我的项目是一个LCD模拟器,所以我使用一个QImage来保存240x64像素的显示内容,蓝色背景为白色。参见第一个示例,该示例显示“T1测试-请稍候”。现在我想用PDF格式记录这些屏幕,每个“屏幕截图”大约有半张A4宽。白色像素是干净的白色正方形,蓝色像素是蓝色,这一点非常重要。但是,由于原始位图非常小,PDF可能在内部使用jpg,放大时会导致图像模糊(示例2)。是的,如前所述,PDF可能包含光栅内容,可能是jpg:。在这两种情况下,放大都会降低质量,但对于嵌入的编码内容来说,甚至是最糟糕的。不知道是否可以选择Qt中嵌入图像的编码,抱歉。