使用QT合并图片的问题

ray_earth 2008-12-02 12:07:00
我需要将四个图片a、b、c、d合并成一个图片。
使用的方法是,将四个图片分别用QImage读取,在画到一个大的QImage上。
功能实现了,但是有一个问题:
合并的后的文件大小是四个原文件大小之和的两倍!!

我用windows的图画程序试过了,合并后的大小就跟原来四个图片大小的和差不多。

哪位大人有解决方法吗?跪求!
...全文
1093 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ray_earth 2008-12-20
  • 打赏
  • 举报
回复
我们交作业的期限到了。所以这个问题就当作遗留问题好了。
感谢之前回复过的好人们!
如果各位能有解决办法了,希望还是能告知我。3x。
^ ^
ray_earth 2008-12-17
  • 打赏
  • 举报
回复
不好意思,最近忙着赶作业。
我的意思是空间变大了,应该是4m的文件变成了8m
  • 打赏
  • 举报
回复
被楼主无视了,楼主,你的需求到底是什么?不是要调整图片大小吗?
zhao_yong 2008-12-14
  • 打赏
  • 举报
回复
学习,楼主的意思是为何合并后的图片占用的空间是合并前的图片之和的两倍?
ray_earth 2008-12-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 once_and_again 的回复:]
QImage img(x,y,z);
unsigned char * combination = img.bits();
[/Quote]



不明白什么意思,能说具体点吗?
once_and_again 2008-12-12
  • 打赏
  • 举报
回复
QImage img(x,y,z);
unsigned char * combination = img.bits();

ray_earth 2008-12-11
  • 打赏
  • 举报
回复
我把代码贴出来。merge()是合并图片,save()是保存图片


void MergeWidget::merge(){
label->clear();

//获取待合并图片的大小
QSize lts = lefttop->image.size();
QSize lbs = leftbottom->image.size();
QSize rts = righttop->image.size();
QSize rbs = rightbottom->image.size();
int tw = lts.width() + rts.width();
int bw = lbs.width() + rbs.width();
int lh = lts.height() + lbs.height();
int rh = rts.height() + rbs.height();
//设置合并后图片的大小
resultImg = QImage(((tw > bw)? tw: bw), ((lh > rh)? lh: rh), QImage::Format_ARGB32);

if(!resultImg.isNull()){
painter = new QPainter(&resultImg);
//在新区域画图
painter->drawImage(0, 0, lefttop->image);
painter->drawImage(lts.width(), 0, righttop->image);
painter->drawImage(0, lts.height(), leftbottom->image);
painter->drawImage(lbs.width(), lts.height(), rightbottom->image);
painter->end();
//根据显示区大小显示合并后的图片
//注:保存后的图片大小为原待合并图大小的和,而非显示图片的大小
QImage displayImg = resultImg.scaled(label->width()-1, label->height()-1, Qt::KeepAspectRatio);
label->setPixmap(QPixmap::fromImage(displayImg));
}
}

/**
* 保存合并后的图片
*/
void MergeWidget::save(){
if(resultImg.isNull())
return;

QString fileName = QFileDialog::getSaveFileName(this, tr("保存图片"), QDir::currentPath(), tr("*.png;;*.jpg)"));

if (!fileName.isEmpty()) {
bool saveOK = resultImg.save(fileName);
if(!saveOK)
QMessageBox::information(this, tr("错误提示"), tr("无法保存 %1.").arg(fileName));
}
}
帅得不敢出门 2008-12-08
  • 打赏
  • 举报
回复
有点奇怪.不知道你是怎么并的.
ray_earth 2008-12-05
  • 打赏
  • 举报
回复
不好意思,是我没说清楚,变成两倍是图片占用的硬盘空间。尺寸大小确实应该是两倍的。
也就是说,四个图片都是1M左右,拼出来的图却有8M多。
degree_37 2008-12-04
  • 打赏
  • 举报
回复
学习~
  • 打赏
  • 举报
回复
你用QPixmap来调整合成后的图像大小不就可以了吗?下面帖个qt4的例子,qt3的这两个类基本没有变化。
在Qt中进行绘图操作的对位图进行缩放,利用QWMatrix类 可以很轻松的完成此功能,示例代码如下:
QPixmap pm ;

// do something to pm

if ( !pm.isNull() )
{
QWMatrix m;//创建一个QWMatrix类的对象
m.scale(0.5f, 0.5f);//设立一个进行缩小到1/2的变换矩阵
pm = pm.xForm(m);//进行变换操作
}

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧