问题描述
|
我想做一些图像矩阵,在一些小部件中显示预览,然后将其全部保存到-例如-
jpg
文件中。我知道我可以将每个像素的每个图像像素复制到一个大像素中,但是我想这不是一种有效的方法……还有什么更好的解决方案吗?
感谢您的建议。
解决方法
与其复制单个像素,不如直接将每个单个图像绘制在足够大的
QPixmap
上,以容纳所有组合的图像。然后可以通过如下方式在拼贴上绘制每个单独的图像来生成拼贴(未测试的代码):
QList<QPixmap> images;
QPixmap collage;
// Make sure to resize collage to be able to fit all images.
...
for (QList<QPixmap>::const_iterator it = images.begin(); it != images.end(); ++it)
{
int x = 0;
int y = 0;
// Calculate x & y coordinates for the current image in the collage.
...
QPainter painter(&collage);
painter.drawPixmap(
QRectF(x,y,(*it).width(),(*it).height()),*it,QRectF(0,(*it).height()));
}
注意,也可以使用QImage
代替QPixmap
。 QPixmap
已针对屏幕显示进行了优化。有关更多详细信息,请参见Qt文档。
, 不,您不想按像素进行像素化。 QImage是一个QPaintDevice。因此,您可以加载它们,将它们相互渲染,并根据需要将它们保存为几种格式。并且当然在屏幕上显示它们。
, 上面的代码对我不起作用,我不知道为什么。
我需要的是像这样的拼贴画:
PicA | PicB |图片... | ... |
我发现与QImage类似,并且此代码有效。
(经过测试的代码):
const int S_iconSize = 80; //The pictures are all quadratic.
QList<const QPixmap*> t_images;//list with all the Pictures,PicA,PicB,Pic...
QImage resultImage(S_iconSize*t_images.size(),S_iconSize,QImage::Format_ARGB32_Premultiplied);
QPainter painter;
painter.begin(&resultImage);
for(int i=0; i < t_images.size(); ++i)
{
painter.drawImage(S_iconSize*i,t_images.at(i)->toImage(),Qt::AutoColor);
}
painter.end();
QPixmap resultingCollagePixmap = QPixmap::fromImage(resultImage);
我知道这很丑陋,因为QImage转换为QPixmap,反之亦然,但是它可以工作。
因此,如果有人有想法如何运行上面的代码(来自Ton van den Heuvel),我将很高兴。 (也许只是缺少的QPainter ???)
问候