• Qt 显示16位图像


      QT从5.12版本开始,增加了QImage::Format_RGBX64、QImage::Format_RGBA64、QImage::Format_RGBA64_Premultiplied等一系列图像格式,使得显示16位位深色彩图像成为可能,读写16位tiff图像终于不用先放缩到8位再显示了(泪目);从5.13版本开始增加了QImage::Format_Grayscale16这种16位位深灰度图像格式。

     

    构造图像

      构造16位图像,原始数据应是ushort类型而不是8位图像时的uchar类型,单个色彩的范围为0~65535而不是之前的0~255。添加图像数据时,原本使用setPixelColor()设置QRgba64类型的色彩,发现程序的运行效率不高,构造图像的时间比较长。事实上,QT自己的官方文档都说了setPixelColor()是一个效率很低的函数,不建议使用它来构造图像。

     1     QImage tempImg = QImage(width, height, QImage::Format_RGBX64);
     2  
     3     int bitCount = 0,index= 0 4     ushort nowColor;
     5     for (int j = 0; j < height; j++)
     6     {
     7         for (int i = 0; i < width; i++)
     8         {
     9             //放缩数据到0~65535,orignalData为float类型
    10             nowColor = (ushort)((orignalData[index] - limitMin) * 65535 / (limitMax - limitMin));
    11             index++;
    12  
    13             //注:setPixelColor()函数是非常耗时的操作
    14             uchar* bit = tempImg.scanLine(j) + i * 8;
    15             memcpy(bit, &nowColor, 2);
    16             memcpy(bit+2, &nowColor, 2);
    17             memcpy(bit+4, &nowColor, 2);
    18             ushort maxNum = 0xffff;
    19             memcpy(bit + 6, &maxNum, 2);
    20             //tempImg.setPixelColor(i, j, QColor::fromRgba64(nowColor, nowColor, nowColor));
    21         }
    22     }

    显示图像

      运行程序后,发现16位位深图像和之前的8位位深图像并没有太大的区别,一度怀疑自己没写正确。后来发现是自己电脑显示器只能显示8位位深图像的缘故。实际上,现在大部分的电脑都还只能显示8位位深图像,改不改成16位位深图像,看自己的硬件配置(以及老板的要求)。

  • 相关阅读:
    Restful、SOAP、RPC、SOA、微服务之间的区别
    SOA(面向服务的架构.)、RPC(远程过程调用)思想
    facade层,service 层,domain层,dao 层设计
    Mac下配置alias,zsh终端命令别名
    .bash_profile 和.zshrc
    什么是零担物流?零担物流的五大特点
    零担是什么意思,零担物流和快递有什么区别
    idea vm options
    idea中 VM options配置
    ES配置生命周期策略
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/15668050.html
Copyright © 2020-2023  润新知