Qt生成灰度图




01

#include<QApplication>
02#include<QLabel>
03#include<QDebug>
04 
05const QString rgbFile("special.jpg");
06const QString grayFile("gray.jpg");
07 
08static bool convertToGray();
09 
10int main(int argc,char *argv[])
11{
12    QApplication app(argc,argv);
13    QLabel rgbLabel,grayLabel;
14 
15    if(!convertToGray()){
16        return 1;
17    }
18 
19    rgbLabel.setPixmap(QPixmap(rgbFile));
20    grayLabel.setPixmap(QPixmap(grayFile));
21    rgbLabel.show();
22    grayLabel.show();
23    return app.exec();
24}
25 
26//转为灰度图
27static bool convertToGray()
28{
29    QImage rgbImage(rgbFile);
30    QSize size=rgbImage.size();
31    QImage grayImage(size,QImage::Format_Indexed8);
32    int width=size.width();
33    int height=size.height();
34    uchar * rgbImageData=rgbImage.bits();
35    uchar * grayImageData=grayImage.bits();
36 
37    if(rgbImage.isGrayscale()){
38        qDebug()<<"Image is already gray!Conversion stopped!";
39        return false;
40    }
41 
42    //若width不是4的倍数,会自动添加字节,使之对齐到4的倍数
43    int realWidth1=rgbImage.bytesPerLine();
44    int realWidth2=grayImage.bytesPerLine();
45    uchar * backup1=rgbImageData;
46    uchar * backup2=grayImageData;
47    //直接取用green绿色分量值作为gray索引值
48    for(int i=0;i<height;
49            i++,
50            rgbImageData=backup1+realWidth1*i,
51            grayImageData=backup2+realWidth2*i){
52        for(int j=0;j<width;j++){
53            *grayImageData=*(rgbImageData+1);
54            rgbImageData+=4;
55            grayImageData++;
56        }
57    }
58 
59    QVector<QRgb> grayColorTable;
60    uint rgb=0;
61    for(int i=0;i<256;i++){
62        grayColorTable.append(rgb);
63        rgb+=0x00010101;//r,g,b值分别加1,a值不变,见QRgb说明
64    }
65 
66    grayImage.setColorTable(grayColorTable);
67    grayImage.save(grayFile);
68    return true;
69}


Qt生成灰度图
http://blog.csdn.net/NRC_DouNingBo/archive/2010/10/09/5929106.aspx


http://www.oschina.net/code/snippet_96486_4027

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.该程序用QT开发,实现图片导入、显示、缩放、拖动及处理(冷暖色、灰度、亮度、饱和、模糊、锐化)。 经实测,我写的这个软件在导入10000*7096像素的超大图片的时候,缩放的速度比2345看图软件还快,2345缩放超大图会卡顿,但本软件不会^_^ 关于程序中缩放拖动部分的说面参见我的博客https://blog.csdn.net/weixin_43935474/article/details/89327314; 2.载入图片后,鼠标移动的时候可以显示鼠所在点的图像的坐标以及灰度; 3.缩放的时候,图片右上角可以显示当前图片的缩放比例; 4.用户可导入16位深的tiff灰度图文件(一般来说是由相机拍摄的灰度图数据),导入16位深的tiff的时候,用户需要先点击界面左上角的checkbox,然后再导入tiff图片,否则图片解析不出来。 注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图,图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下链接给我的帮助最大: https://blog.csdn.net/chenlu5201314/article/details/56276903 上述博客作为详细解析tiff文件结构的说明文档,写的非常详细,我也是根据上面的内容,自己编写了一个解析tiff文件的类(当然功能很少,只能解析符合特定条件的tiff文件) //************************************************************ //by Bruce Xu //注:解析tiff的类只解析特定的tiff文件! //1.解析的tiff文件中只存在一幅图,如果文件中存在多幅图,本类不支持解析! //2.图像数据为8位或16位深度的灰度图,如果是其他类型的图片,本类不支持解析! //3.图片没有被压缩过! //************************************************************

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值