Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ PDF中的Qt图像具有缩放瑕疵_C++_Image_Qt_Pdf_Image Compression - Fatal编程技术网

C++ PDF中的Qt图像具有缩放瑕疵

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

我使用QPrinter(设置为高分辨率)直接生成PDF文档,在QPrinter中,我使用QPaint::drawImage()绘制一些像素图像

这些图像的大小非常小(约200x50像素),只有3种颜色。我在PDF中使用较大的QRect作为边界框放大它们

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*图像;
//...
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中嵌入图像的编码,抱歉。