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. MongoDB命令模式下的条件过滤总结

    db.tb1.find() //查询全部,用it查看下一页.db.tb1.find({"age":1}) //查询年龄==1的记录db.tb1.find({},{"age ...

  2. Redis 笔记与总结1 安装部署

    NoSQL 使用场景: 1.对数据高并发读写 2.对海量数据的高效率存储和访问 3.对数据的高可扩展性和高可用性 Redis 通常被称为数据结构服务器,因为键可以包含字符串(strings).哈希(h ...

  3. 关于Shader的跨平台方案的考虑

      Apple 推出 metal后,除了新的metal framewrok外,也多了一种新的shader语言,最近工作也做了一些metal移植的测试,主要还是现有引擎如何可以快速支持metal的解决方 ...

  4. 使用FROM确认按钮(键盘13号键)提交特性并使用ajax.POST提交.

    如果又想使用FROM确认按钮(键盘13号键)提交特性  还能继续用AJAX.POST提交.就需要使用return false 来阻止FROM默认提交 代码如下: HTML页面 这里最关键就是用了ret ...

  5. 什么JSONP

    JSONP 是JSON with padding(填充式JSON 或参数式JSON)的简写,是应用JSON 的一种新方法,在后来的Web 服务中非常流行.JSONP 看起来与JSON 差不多,只不过是 ...

  6. 20145235《Java程序设计》第7周学习总结

    教材学习内容总结 13.1 认识时间与日期 格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身自传减速而造成误差. 世界时(UT):通过观测远方星体跨过子午线而得,受地 ...

  7. 【转】Cocos2d - 观察者模式NotificationCenter

    http://shahdza.blog.51cto.com/2410787/1611575 [唠叨] 观察者模式 也叫订阅/发布(Subscribe/Publish)模式,是 MVC( 模型-视图-控 ...

  8. sqlserver快速查找所有存储过程中是否包含某字符

    --将text替换成你要查找的内容 select name from sysobjects o, syscomments s where o.id = s.id and text like '%tex ...

  9. hive中关于数据库与表等的基本操作

    一:基本用法 1.新建数据库 2.删除数据库 3.删除非空的数据库 4.指定数据库的位置 LOCATION:指定数据库的位置,不会在系统的默认文件下. 5.在指定数据库中新建表(验证在指定的数据库中可 ...

  10. RequestContextListener有什么用

    问题: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request att ...