[QT]抄—影像显示实验
QtCreator新建一个Qt Application,命名为ImageView
在项目文件夹下添加gdal库,统一放在ImageView\gdal目录下。
右键单击项目,选择添加库命令,添加gdal_i.lib和头文件路径,完成后可以再ImageView.pro文件中查看:
win32: LIBS += -L$$PWD/gdal/lib/ -lgdal_i
INCLUDEPATH += $$PWD/gdal/include
DEPENDPATH += $$PWD/gdal/include Main中的代码:
#include "mainwindow.h"
#include <QApplication>
#include <QtGui/QLabel>
#include <QtCore> int main(int argc, char *argv[])
{
QApplication app(argc, argv); QTextCodec *codec=QTextCodec::codecForName("GBK");
if(codec==NULL)
codec=QTextCodec::codecForLocale(); QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec); QTranslator translator( );
translator.load( "qt_zh_CN.qm", "." );
app.installTranslator( &translator ); QFont font;
font.setFamily(QString::fromUtf8("\345\256\213\344\275\223"));
font.setPointSize();
app.setFont(font); CImageDisplayDlg MainWindow;
app.setActiveWindow(&MainWindow);
MainWindow.show(); QString myStylesheet = "QDialog,QMainWindow,QSplitter\
{background-color: qlineargradient(x1:,y1:,x2:,y2:,stop: rgb(,,) stop: rgb(,,));}\
QMenuBar{background-color: rgb(,,);}";
app.setStyleSheet(myStylesheet); return app.exec();
}
main
窗体头文件
/***************************************************************************
*
* Time: 2012-05-28
* Project: 遥感图像显示Demo
* Purpose: 遥感图像显示Demo
* Author: 李民录
* Copyright (c) 2011, liminlu0314@163.com
* Describe:遥感图像显示Demo
*
****************************************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include "ui_MainWindow.h"
#include <string>
using namespace std; class GDALDataset; QT_BEGIN_NAMESPACE
class QCheckBox;
class QComboBox;
class QLabel;
class QSpinBox;
QT_END_NAMESPACE class CImageDisplayDlg :
public QDialog,
private Ui::ImageDisplayDlg
{
Q_OBJECT public:
CImageDisplayDlg(QWidget* parent = );
~CImageDisplayDlg(void); private:
bool CheckInputData(const char* pszRaster, const char* pszVector, QString& strMsg); private slots:
void LoadInputRaster();
void soltApply();
void OnOK(); private:
bool ShowRasterFile();
void ShowRaster();
private:
string m_strInputRaster;
GDALDataset *m_pDataset;
double m_dScale;
int m_iMinx;
int m_iMiny;
int m_iMaxx;
int m_iMaxy;
}; #endif /*MAINWINDOW_H*/
CImageDisplayDlg.h
窗体实现
/***************************************************************************
*
* Time: 2012-05-28
* Project: 遥感图像显示Demo
* Purpose: 遥感图像显示Demo
* Author: 李民录
* Copyright (c) 2011, liminlu0314@163.com
* Describe:遥感图像显示Demo
*
****************************************************************************/
#include "MainWindow.h" #include <QFileDialog>
#include <QMessageBox>
#include <QSettings> #include "gdal_priv.h" CImageDisplayDlg::CImageDisplayDlg(QWidget* parent)
: QDialog( parent )
{
setupUi(this); QObject::connect(buttonBox, SIGNAL(accepted()), this, SLOT(OnOK()));
QObject::connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
QObject::connect(pushButtonInput, SIGNAL(clicked()), this, SLOT(LoadInputRaster()));
QObject::connect(pushButtonApply, SIGNAL(clicked()), this, SLOT(soltApply())); labelView->clear();
m_pDataset = NULL;
} CImageDisplayDlg::~CImageDisplayDlg(void)
{
if(m_pDataset != NULL)
{
GDALClose((GDALDatasetH) m_pDataset);
m_pDataset = NULL;
}
} bool CImageDisplayDlg::ShowRasterFile()
{
GDALAllRegister();
m_pDataset = (GDALDataset*)GDALOpen(m_strInputRaster.c_str(), GA_ReadOnly);
if (m_pDataset == NULL)
{
QMessageBox::information(this,tr("提示"),tr("指定的文件不能打开!"));
return false;
}
//设置投影坐标范围
int dataWidth = m_pDataset->GetRasterXSize();
int dataHeight = m_pDataset->GetRasterYSize(); double padfTransform[] = {0.0};
m_pDataset->GetGeoTransform(padfTransform); //设置行列号范围
spinStartCol->setRange(, dataWidth-);
spinStartRow->setRange(, dataHeight-);
spinEndCol->setRange(, dataWidth-);
spinEndRow->setRange(, dataHeight-); spinStartCol->setValue();
spinStartRow->setValue();
spinEndCol->setValue(dataWidth-);
spinEndRow->setValue(dataHeight-); ShowRaster();
return true;
} void CImageDisplayDlg::LoadInputRaster()
{
QFileDialog::Options options;
QString selectedFilter;
QString fileName = QFileDialog::getOpenFileName(this,
tr("打开原始图像"),
".",
tr("所有文件(*.*);;Erdas Image (*.img);;PCIDSK (*.pix);;GTiff (*.tif *.tiff);;ENVI (*.*)"),
&selectedFilter,
options); if (!fileName.isEmpty())
{
if(m_pDataset != NULL)
{
GDALClose((GDALDatasetH) m_pDataset);
m_pDataset = NULL;
} lineInput->setText(fileName);
m_strInputRaster = QFile::encodeName( fileName ).constData(); if(!ShowRasterFile())
{
lineInput->setText("");
m_strInputRaster = "";
}
}
} void CImageDisplayDlg::ShowRaster()
{
int iStartCol = spinStartCol->value();
int iStartRow = spinStartRow->value(); int dataWidth = spinEndCol->value() - iStartCol;
int dataHeight = spinEndRow->value() - iStartRow;
int dataBands = m_pDataset->GetRasterCount(); int band_list[] = {,,}; m_dScale = dataHeight > dataWidth ? dataHeight : dataWidth;
int iViewHeight = ;
m_dScale = iViewHeight/m_dScale; int iSize = GDALGetDataTypeSize(GDT_Byte) / ;
int iScaleWidth = static_cast<int>(dataWidth*m_dScale+0.5);
int iScaleHeight = static_cast<int>(dataHeight*m_dScale+0.5); iScaleWidth = (iScaleWidth*+)/*; unsigned char* pBuffer = new unsigned char[iScaleWidth*iScaleHeight*dataBands];
CPLErr err = m_pDataset->RasterIO(GF_Read, , , dataWidth, dataHeight, pBuffer, iScaleWidth, iScaleHeight,
GDT_Byte, dataBands, band_list, iSize*dataBands, iSize*iScaleWidth*dataBands, iSize);
unsigned char* pDataBuffer = NULL;
if (dataBands >= )
{
pDataBuffer = pBuffer;
}
else
{
pDataBuffer = new unsigned char[iScaleWidth*iScaleHeight*];
for (int i=; i<iScaleWidth*iScaleHeight*; i++)
pDataBuffer[i] = pBuffer[i/]; delete []pBuffer;
} QImage QImg(pDataBuffer, iScaleWidth, iScaleHeight, QImage::Format_RGB888);
QPixmap pixmap = QPixmap::fromImage(QImg);
delete []pDataBuffer; labelView->setPixmap(pixmap);
} void CImageDisplayDlg::OnOK()
{
accept();
} void CImageDisplayDlg::soltApply()
{
ShowRaster();
}
实现文件
编译运行需要将GDAl所有的DLL拷贝到输出目录下。
结果如图:
[QT]抄—影像显示实验的更多相关文章
- Qt自适应大小显示图片,添加菜单
由于后面的图像处理需要UI,OpenCV自带也不怎么会,MFC实在懒得学的.听同学说Qt不错,就用Qt做UI了. 本文主要介绍三个内容:在Qt Creator中使用OpenCV2.Qt中自适应显示图片 ...
- Qt全屏显示窗口、子窗口的相关函数
Qt全屏显示函数 window.showFullScreen() Qt最大化显示函数 window.showMaximized() Qt最小化显示函数 ...
- 基于GDAL的遥感影像显示(C#版)
基于GDAL的遥感影像显示(C#版) - 菜菜的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/RSyaoxin/article/details/9220735
- Qt支持中文显示
Qt支持中文显示<1>.在代码中添加以下代码 QTextCodec* codec = QTextCodec::codecForLocale(); if (codec != NULL) { ...
- 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!
1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...
- QT+OpenGL读取显示图片,OpenGL在QT里的刷新问题(好几篇)
GLuint readImage(char *filename){ GLuint tex_id; GLint alignment; QImage tex, buf; buf.load ...
- 关于VGA显示实验的问题
今天做了一个关于VGA的显示实验,但是由于产生的25M时钟不正确所以一直没有图像产生.刚开始的程序如下 虽然仿真的时候出现了时序,但是在下载到硬件的时候不正确. 后来改成 结果就正确了. 另外之前关于 ...
- Qt 让Label显示图片并把图片居中
Qt 让Label显示图片并把图片居中 QPixmap image("./13.jpg"); QPixmap fitpixmap=image.scaled(ui->lab ...
- zju(9)LCD显示实验
1.实验目的 1.学习和掌握linux下对IIC的操作方法以及驱动和应用程序的编写: 二.实验内容 1.编写EduKit-IV实验箱Linux操作系统下IIC的驱动,并编写应用程序实现将数据写入EEP ...
随机推荐
- yii uploadfile 错误提示: fileinfo php extension is not installed
rule规则里面增加 'checkExtensionByMimeType'=>false,
- Responsive布局技巧
在Responsive布局中,可以毫无保留的丢弃: 第一, 尽量少用无关紧要的div: 第二,不要使用内联元素(inline): 第三,尽量少用JS或flash: 第四,丢弃没用的绝对定位和浮动样式: ...
- PHP mkdir 方法 创建 0777 权限的目录问题
php 中使用 mkdir() 方法创建 0777 权限的目录: $path = './Logs/secondCheck/';if(!is_dir($path)){ mkdir($path, 0777 ...
- ThinkPHP 关联模型中查询某条记录的父级(非查询子级)
数据表 id cat_name cat_pid 76 手机.数码 0 84 手机配件 76 86 蓝牙耳机 84 从属关 ...
- 一台电脑安装两个xampp的方法
如果一台机器已经有一个xampp..如果还需要安装另外一个不同版本的xampp(里面PHP,mysql不同版本之类的)用做测试.则可以安装绿色版(不需注册,解压就可用) 下载地址(第二个xampp只能 ...
- java-冒泡排序
1.打印 print--打印,不换行,根据要求加上换行符 println--打印一次就换行 printf--打印,继承C语音的格式,可以进行格式化输出 换行符 '\r'是回车,'\n'是换行,‘\t' ...
- Diode
Diode https://zh.wikipedia.org/wiki/真空管 抽真空 电子在于其放射过程中,因会与空气中之组成分子相撞而产生阻力,因此电子经由如空气之类的介质来移动的话,将会比在真空 ...
- Siddhi CEP Window机制
https://docs.wso2.com/display/CEP400/SiddhiQL+Guide+3.0#SiddhiQLGuide3.0-Window https://docs.wso2.co ...
- java override
java override // 覆盖父类的方法,在子类直接调用子类内部这个方法时 public class TestCalc{ protected static class Wine{ String ...
- WeakHashMap 理解笔记
An entry in a WeakHashMap will automatically be removed when its key is no longer in ordinary use. M ...