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. eclipse远程调试

    -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000Eclipse 菜单上的 Window > Preferences > ...

  2. 暑假训练round2 D: 好序列(Manacher)

    Problem 1061: 好序列 Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  %lld  ...

  3. [办公自动化]无法使用江南天安usbkey 无法使用视频网站

    同事打来电话说,无法使用江南天安开发的usbkey. 修复基本步骤记录如下: 1.卸载一切设备管理器中与之相关的驱动.拔出key. 2.重启计算机. 3.前往业务公开网站安装驱动. 4.插入key测试 ...

  4. Nginx 笔记与总结(11)Nginx + php-fpm + MySQL 安装 ecshop

    下载 ecshop (ECShop_V2.7.3_UTF8_release1106)安装包,解压之后把 upload 文件夹使用 ftp 传到服务器的 /usr/local/html 目录下,同时改名 ...

  5. HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)

    反向 ajax 又叫 comet / server push / 服务器推技术 应用范围:网页聊天服务器,例如新浪微博在线聊天.google mail 网页聊天 原理:一般而言,HTTP 协议的特点是 ...

  6. 做了一个简易的git 代码自动部署脚本

    做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08)   阅读(200 ...

  7. WEB安全攻防学习内容

    一.网络安全篇 TCP/IP协议初识 Linux操作系统基础 网络漏洞扫描与信息收集 口令攻击 服务安全 日志安全 安全基线加固 防火墙vpn安全接入 网络无线原理和安全防护 二.编程篇 初识Pyth ...

  8. RedirectResult,RedirectToRoute

    RedirectResult:运行重新导向到其他网址,在RedirectResult的内部,基本上还是以Response.Redirect方法响应HTTP 302暂时导向. eg: public Ac ...

  9. filesort

  10. SQL代码创建表例子

    create table class ( code ) primary Key, name ) ); create table student ( code ) primary Key, name ) ...