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]抄—影像显示实验的更多相关文章

  1. Qt自适应大小显示图片,添加菜单

    由于后面的图像处理需要UI,OpenCV自带也不怎么会,MFC实在懒得学的.听同学说Qt不错,就用Qt做UI了. 本文主要介绍三个内容:在Qt Creator中使用OpenCV2.Qt中自适应显示图片 ...

  2. Qt全屏显示窗口、子窗口的相关函数

    Qt全屏显示函数         window.showFullScreen() Qt最大化显示函数         window.showMaximized() Qt最小化显示函数         ...

  3. 基于GDAL的遥感影像显示(C#版)

    基于GDAL的遥感影像显示(C#版) - 菜菜的专栏 - 博客频道 - CSDN.NET  http://blog.csdn.net/RSyaoxin/article/details/9220735

  4. Qt支持中文显示

    Qt支持中文显示<1>.在代码中添加以下代码 QTextCodec* codec = QTextCodec::codecForLocale(); if (codec != NULL) { ...

  5. 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!

    1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...

  6. QT+OpenGL读取显示图片,OpenGL在QT里的刷新问题(好几篇)

    GLuint readImage(char *filename){    GLuint tex_id;    GLint alignment; QImage tex, buf;    buf.load ...

  7. 关于VGA显示实验的问题

    今天做了一个关于VGA的显示实验,但是由于产生的25M时钟不正确所以一直没有图像产生.刚开始的程序如下 虽然仿真的时候出现了时序,但是在下载到硬件的时候不正确. 后来改成 结果就正确了. 另外之前关于 ...

  8. Qt 让Label显示图片并把图片居中

    Qt 让Label显示图片并把图片居中   QPixmap image("./13.jpg"); QPixmap fitpixmap=image.scaled(ui->lab ...

  9. zju(9)LCD显示实验

    1.实验目的 1.学习和掌握linux下对IIC的操作方法以及驱动和应用程序的编写: 二.实验内容 1.编写EduKit-IV实验箱Linux操作系统下IIC的驱动,并编写应用程序实现将数据写入EEP ...

随机推荐

  1. 《GK101任意波发生器》升级固件发布(版本:1.0.2.build126)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build126 编译日期:2014-08-23 ====================================== 二. ...

  2. NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)

    Problem 1050: Just Go Time Limits:  3000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  % ...

  3. 每天学点GDB 13

    ptrace是gdb实现的基石,本文简要介绍一下ptrace. ptrace linux提供的系统调用ptrace,使得一个进程可以attach到另一个进程并进而完整的控制被attach上的进程. 被 ...

  4. PHP 设计模式 笔记与总结(8)策略模式

    ① 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式. ② 实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示 ...

  5. SVN使用安装

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  6. 基于LR的HTTP协议接口性能测试脚本实例

    背景介绍 XXX项目性能测试中新增业务场景:XX设备的在线激活,因为存在多用户同时在线激活,故需进行性能测试以确认后台服务器系统在多用并发时功能是否正常,性能指标是否满足规格要求.用户使用场景为用户通 ...

  7. 浏览器cookie数

    <?php for ($w=0; $w < 200 ; $w++) { setcookie('name'.$w,'value'.$w, time()+3600*10 ); } var_du ...

  8. Java:按值传递还是按引用传递详细解说

    前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有 ...

  9. ServletContextDemo

    1.servlet 之间共享数据 package xw.servlet; import javax.servlet.ServletContext; import javax.servlet.http. ...

  10. 删除本地git版本库中受版本控制的文件

     git乱码解决方案汇总 乱码原因 搜索一番,发现git文件名.log乱码,是普遍问题,这其中有编码的原因,也有跨平台的原因.主要原因是Windows 系统中的Git对中文文件名采用不同的编码保存所致 ...