Qt利用ImageWatch實(shí)現(xiàn)圖片查看功能
使用Qt實(shí)現(xiàn)ImageWatch圖片查看功能,圖片放大可見RGB像素值。支持打開大圖片,即打開一個(gè)幾百M(fèi)B甚至幾GB的大圖片。
1、什么是ImageWatch
Visual Studio有專門針對OpenCV開發(fā)的插件,名叫ImageWatch,圖片放大之后可以查看RGB的像素值。
Image Watch 2019 - Visual Studio Marketplace


2、得空自己用Qt仿照實(shí)現(xiàn)了一下這個(gè)功能:
純粹Qt寫的,沒有使用Halcon和OpenCV庫。
(1)打開8位的灰度圖

鼠標(biāo)滾輪放大之后,可以查看灰度值;鼠標(biāo)中鍵下壓可以拖動(dòng)圖片;

(2)打開24位的彩色圖

鼠標(biāo)放大之后可以查看RGB三通道的數(shù)值;鼠標(biāo)中鍵下壓可以拖動(dòng)圖片;

3、怎么使用Qt打開一個(gè)幾百M(fèi)B甚至幾GB的大圖片?
Qt官方文檔建議使用QImageReader,直接上源碼:
bool MainWindow::readBigImage(const QString &path)
{
QImageReader reader(path);
reader.setAutoTransform(true);
if (!reader.canRead())
{
return false;
}
QSize originSize = reader.size(); //原始的分辨率
qDebug() << originSize;
QSize newSize = originSize.scaled(800, 600, Qt::KeepAspectRatio); //縮放后的分辨率,保持縱橫比
qDebug() << newSize;
QRect clipRt(500, 0, 1000, 1000);
//讀取的方式
#if 1
reader.setScaledSize(newSize); //按照指定的縮放大小來讀取
#else
reader.setClipRect(clipRt); //按照指定的矩形區(qū)域來讀取
#endif
QImage image = reader.read();
if (image.isNull())
{
QFile file(path);
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
image = QImage::fromData(data).scaled(newSize, Qt::KeepAspectRatio);
if (image.isNull())
{
return false;
}
}
ui->graphicsView->addCADBackgroundImage(image);
//一次性定時(shí)器
QTimer::singleShot(10, this, [=]() {
slotViewZoomAuto();
});
return true;
}到此這篇關(guān)于Qt利用ImageWatch實(shí)現(xiàn)圖片查看功能的文章就介紹到這了,更多相關(guān)Qt ImageWatch圖片查看內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)簡單的學(xué)生管理系統(tǒng)
本文給大家分享的是使用C++實(shí)現(xiàn)的簡單的學(xué)生管理系統(tǒng)的代碼,主要是通過鏈表來實(shí)現(xiàn),非常簡潔,有需要的小伙伴可以參考下。2015-07-07
C++11/14如何使用typedef和using定義類型別名和別名模版
這篇文章主要介紹了C++11/14如何使用typedef和using定義類型別名和別名模版2023-04-04
C/C++ int數(shù)與多枚舉值互轉(zhuǎn)的實(shí)現(xiàn)
在C/C++在C/C++的開發(fā)中經(jīng)常會(huì)遇到各種數(shù)據(jù)類型互轉(zhuǎn)的情況,本文主要介紹了C/C++ int數(shù)與多枚舉值互轉(zhuǎn)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08
c++ 如何在libuv中實(shí)現(xiàn)tcp服務(wù)器
這篇文章主要介紹了c++ 如何在libuv中實(shí)現(xiàn)tcp服務(wù)器,幫助大家更好的理解和使用libuv,感興趣的朋友可以了解下2021-02-02
C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別
這篇文章主要介紹了C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-04-04

