CPLErr GDALRasterBand::RasterIO

(

GDALRWFlag

eRWFlag,

int

nXOff,

int

nYOff,

int

nXSize,

int

nYSize,

void *

pData,

int

nBufXSize,

int

nBufYSize,

GDALDataType

eBufType,

int

nPixelSpace,

int

nLineSpace

)

Read/write a region of image data for this band.

This method allows reading a region of a GDALRasterBand into a buffer, or writing data from a buffer into a region of a GDALRasterBand. It automatically takes care of data type translation if the data type (eBufType) of the buffer is different than that of the GDALRasterBand. The method also takes care of image decimation / replication if the buffer size (nBufXSize x nBufYSize) is different than the size of the region being accessed (nXSize x nYSize).

The nPixelSpace and nLineSpace parameters allow reading into or writing from unusually organized buffers. This is primarily used for buffers containing more than one bands raster data in interleaved format.

Some formats may efficiently implement decimation into a buffer by reading from lower resolution overview images.

For highest performance full resolution data access, read and write on "block boundaries" as returned by GetBlockSize(), or use the ReadBlock() and WriteBlock() methods.

This method is the same as the C GDALRasterIO() function.

Parameters:

 

eRWFlag

Either GF_Read to read a region of data, or GF_Write to write a region of data.

 

nXOff

The pixel offset to the top left corner of the region of the band to be accessed. This would be zero to start from the left side.

 

nYOff

The line offset to the top left corner of the region of the band to be accessed. This would be zero to start from the top.

 

nXSize

The width of the region of the band to be accessed in pixels.

 

nYSize

The height of the region of the band to be accessed in lines.

 

pData

The buffer into which the data should be read, or from which it should be written. This buffer must contain at least nBufXSize * nBufYSize words of type eBufType. It is organized in left to right, top to bottom pixel order. Spacing is controlled by the nPixelSpace, and nLineSpace parameters.

 

nBufXSize

the width of the buffer image into which the desired region is to be read, or from which it is to be written.

 

nBufYSize

the height of the buffer image into which the desired region is to be read, or from which it is to be written.

 

eBufType

the type of the pixel values in the pData data buffer. The pixel values will automatically be translated to/from the GDALRasterBand data type as needed.

 

nPixelSpace

The byte offset from the start of one pixel value in pData to the start of the next pixel value within a scanline. If defaulted (0) the size of the datatype eBufType is used.

 

nLineSpace

The byte offset from the start of one scanline in pData to the start of the next. If defaulted (0) the size of the datatype eBufType * nBufXSize is used.

Returns:

CE_Failure if the access fails, otherwise CE_None.

CPLErr GDALRasterBand::ReadBlock

(

int

nXBlockOff,

int

nYBlockOff,

void *

pImage

)

Read a block of image data efficiently.

This method accesses a "natural" block from the raster band without resampling, or data type conversion. For a more generalized, but potentially less efficient access use RasterIO().

This method is the same as the C GDALReadBlock() function.

See the GetLockedBlockRef() method for a way of accessing internally cached block oriented data without an extra copy into an application buffer.

Parameters:

 

nXBlockOff

the horizontal block offset, with zero indicating the left most block, 1 the next block and so forth.

 

nYBlockOff

the vertical block offset, with zero indicating the left most block, 1 the next block and so forth.

 

pImage

the buffer into which the data will be read. The buffer must be large enough to hold GetBlockXSize()*GetBlockYSize() words of type GetRasterDataType().

Returns: CE_None on success or CE_Failure on an error.

The following code would efficiently compute a histogram of eight bit raster data. Note that the final block may be partial ... data beyond the edge of the underlying raster band in these edge blocks is of an undermined value.

CPLErr GetHistogram( GDALRasterBand *poBand, int *panHistogram )

{

int nXBlocks, nYBlocks, nXBlockSize, nYBlockSize;

int iXBlock, iYBlock;

GByte *pabyData;

memset( panHistogram, 0, sizeof(int) * 256 );

CPLAssert( poBand->GetRasterDataType() == GDT_Byte );

poBand->GetBlockSize( &nXBlockSize, &nYBlockSize );

nXBlocks = (poBand->GetXSize() + nXBlockSize - 1) / nXBlockSize;

nYBlocks = (poBand->GetYSize() + nYBlockSize - 1) / nYBlockSize;

pabyData = (GByte *) CPLMalloc(nXBlockSize * nYBlockSize);

for( iYBlock = 0; iYBlock < nYBlocks; iYBlock++ )

{

for( iXBlock = 0; iXBlock < nXBlocks; iXBlock++ )

{

int nXValid, nYValid;

poBand->ReadBlock( iXBlock, iYBlock, pabyData );

// Compute the portion of the block that is valid

// for partial edge blocks.

if( (iXBlock+1) * nXBlockSize > poBand->GetXSize() )

nXValid = poBand->GetXSize() - iXBlock * nXBlockSize;

else

nXValid = nXBlockSize;

if( (iYBlock+1) * nYBlockSize > poBand->GetYSize() )

nYValid = poBand->GetYSize() - iYBlock * nYBlockSize;

else

nYValid = nYBlockSize;

// Collect the histogram counts.

for( int iY = 0; iY < nYValid; iY++ )

{

for( int iX = 0; iX < nXValid; iX++ )

{

panHistogram[pabyData[iX + iY * nXBlockSize]] += 1;

}

}

}

}

}

GDAL中RasterIO函数(把文件读取为一个一维数组)和ReadBlock函数(读取栅格数据块)的更多相关文章

  1. linux中合并多个文件内容到一个文件的例子

    尊敬的用户您好,从即日起 导入 及 导出 功能已经下线,请到阿里云官方数据库管理平台 iDB Cloud 使用该功能! 继续在 iDB Cloud 中发现导出的数据库文件是按照每个表生成的SQL文件, ...

  2. “在注释中遇到意外的文件结束”--记一个令人崩溃的bug

    下午写程序,写的好好的,突然报错"在注释中遇到意外的文件结束". 下面是官方给出的错误原因是缺少注释终结器 (* /). // C1071.cpp int main() { } / ...

  3. shell脚本实例一,移动文件夹中大于2000B的文件到另一个文件夹

    shell脚本能帮我们简化linux下的一些工作,现在有个需求,把TMPA文件夹下大于2000B的文件都移动到TMPB下 #! /bin/bash function movefiles() { ` d ...

  4. 在vi中打开多个文件,复制一个文件中多行到另一个文件中

    :set number 查看行号1.vi a.txt b.txt或者vi *.txt 2.文件间切换 :n切换到下一个文件,:wn保存再切换 :N到上一个文件,:wN保存再切换 :.=看当前行 3.比 ...

  5. mysql函数取出单个字段重新组成一维数组

    array_column():

  6. php 把一个一维数组的值依次赋值到二维数组中的每一项

    Array( [0] => 1 [1] => 4 [2] => 2 [3] => 6 ) Array( [0] => Array ( [field_name] => ...

  7. JS 封装一个求数组最大值的函数

    var aa = [1,2,3,4,9,2,5]; z(aa); function z(attr){ var b = 0 for(var i =1;i<aa.length;i++){ if(aa ...

  8. php文件加载、错误处理、方法函数和数组

    数组运算符注意:php中,数组的元素的顺序,不是由下标(键名)决定的,而是完全由加入的顺序来决定.联合(+):将右边的数组项合并到左边数组的后面,得到一个新数组.如有重复键,则结果以左边的为准$v1 ...

  9. python 集合、函数和文件操作

    1.set集合 set集合是一个无序.不可重复.可嵌套的序列,基本功能是进行成员关系测试和删除重复元素,可以使用大括号({})或者 set()函数创建集合,注意:创建一个空集合必须用 set() 而不 ...

随机推荐

  1. 一款基于jQuery多图切换焦点图插件

    这次要给大家分享的也是一款jQuery图片滑块插件,之前有介绍过不少实用的jQuery焦点图插件和jQuery图片滑块插件,比如jQuery左侧Tab切换的图片滑块插件.它的特点是可以同时切换多张图片 ...

  2. 最少javascript代码完成一个2048游戏

    原生javascript代码写的2048游戏.建议在谷歌浏览器下跑.'WASD'控制方向.演示地址请移步:http://runjs.cn/detail/bp8baf8b 直接贴代码~ html: &l ...

  3. kafka监控之KafkaOffsetMonitor

    参考自:http://www.cnblogs.com/sunxucool/p/3904850.html 流行的kafka监控有kafka-web-console.KafkaOffsetMonitor. ...

  4. Winform下实现图片切换特效的方法

    本文实例讲述了Winform下实现图片切换特效的方法,是应用程序开发中非常实用的一个功能.分享给大家供大家参考之用.具体方法如下: 本实例源自网络,功能较为齐全.丰富!主要功能代码如下: using ...

  5. 虚拟机+ubuntu 图形界面和终端界面的切换

    虚拟机环境,在图形界面和文本界面间切换:1  VMWare虚拟机下,由图形界面切换到文本界面,和虚拟机设置有关,默认VM占用Ctrl+Alt为热键,所以由图形界面切换到文本界面的组合键为: Ctrl+ ...

  6. 【Java/Android性能优化1】Android性能调优

    本文参考:http://www.trinea.cn/android/android-performance-demo/ 本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.La ...

  7. hg(Mercurial)版本库迁移到git版本库

    这几天没事干净搞迁移了,迁移完MVC又迁移版本库,还把工作电脑迁移了一下,开始用Win8.1了.这个迁移主要是因为实在不想在工作电脑上又装git又装hg了,点个右键出来一大堆菜单,况且现在git已经成 ...

  8. Linux下命令sort, uniq

    标题:sort, uniq 一.sort命令的使用       1. 作用:sort命令顾名思意,其可以帮助我们进行排序,而且可以依据不同的数据类型来排序.例如数字和文字的排序就不一样,sort可以指 ...

  9. 给VPS装桌面

    转自:百度经验  致谢! 1.首先我们要先升级一下软件源给安装桌面环境做准备. 执行命令:apt-get update   2.安装桌面环境或窗口管理器: apt-get install xubunt ...

  10. Sharepoint 2013 安装部署系列篇 第二篇 -- SQL集群安装

    第一部分 系统集群安装. 第三部分 安装和配置网络负载均衡在前端web服务器 第四部分 安装和配置sharepoint 场(三层拓扑部署) 以下图片均为sharepoint 2010..由于本人的笔记 ...