关于刑警破案的电视剧:分块写HDF源码示例——DYQ
来源:百度文库 编辑:中财网 时间:2024/05/06 09:04:08
算法原理,该图片是从IDL的jpeg2000help中截取,原理基本类似,依次分块写入
ScreenShot00723.jpg
程序运行效果如下,将一6000*6000的数据按照tileSize = [1024, 1024]的大小写入一hdf文件中
ScreenShot00721.jpg
看看最终结果文件(HDF Explorer查看)
ScreenShot00722.jpg
运行源码
CODE:
;+
;escription:
PRO CENTERTLB, tlb, x, y, NoCenter=nocenter
COMPILE_OPT StrictArr
geom = WIDGET_INFO(tlb, /Geometry)
IF N_ELEMENTS(x) EQ 0 THEN xc = 0.5 ELSE xc = FLOAT(x[0])
IF N_ELEMENTS(y) EQ 0 THEN yc = 0.5 ELSE yc = 1.0 - FLOAT(y[0])
center = 1 - KEYWORD_SET(nocenter)
;
oMonInfo = OBJ_NEW('IDLsysMonitorInfo')
rects = oMonInfo -> GetRectangles(Exclude_Taskbar=exclude_Taskbar)
pmi = oMonInfo -> GetPrimaryMonitorIndex()
OBJ_DESTROY, oMonInfo
screenSize =rects[[2, 3], pmi]
; Get_Screen_Size()
IF screenSize[0] GT 2000 THEN screenSize[0] = screenSize[0]/2 ; Dual monitors.
xCenter = screenSize[0] * xc
yCenter = screenSize[1] * yc
xHalfSize = geom.Scr_XSize / 2 * center
yHalfSize = geom.Scr_YSize / 2 * center
XOffset = 0 > (xCenter - xHalfSize) < (screenSize[0] - geom.Scr_Xsize)
YOffset = 0 > (yCenter - yHalfSize) < (screenSize[1] - geom.Scr_Ysize)
WIDGET_CONTROL, tlb, XOffset=XOffset, YOffset=YOffset
END
;
; 测试 分块写如HDF文件
; 读取请参考 C:\Program Files\ITT\IDL71\examples\doc\sdf\hdf_info.pro
; Author: DYQ 2010-5-9;
;
; Blog: http://hi.baidu.com/dyqwrp
;-
PRO WRITEREADHDF
;创建隐藏tlb,目的为了显示进度条
wtlb = WIDGET_BASE(map = 0)
WIDGET_CONTROL,wtlb,/realize
;tlb居中显示
CENTERTLB,wtlb
;创建进度条
process = IDLITWDPROGRESSBAR( TIME=0,$
GROUP_LEADER=wtlb, $
TITLE='测试分块保存HDF... 请等待')
IDLITWDPROGRESSBAR_SETVALUE, process, 0
;源数据及相关信息
image = DIST(6000)
;求出数据范围
myRANGE=[MAX(image,min=min_xray),min_xray]
dims = SIZE(image,/dimension)
;块大小
tileSize = [1024, 1024]
;初始化写入HDF数据
filename = 'c:\test.hdf'
sd_id=HDF_SD_START(filename,/CREATE)
;
sds_id=HDF_SD_CREATE(sd_id,'largeWrite', $
[dims[0],dims[1]],/FLOAT)
;
HDF_SD_SETINFO,sds_id,FILL=0.0,LABEL='data', $
UNIT='float',$
RANGE=myRANGE
;
; Write labels to each of the dimension
HDF_SD_DIMSET,HDF_SD_DIMGETID(sds_id,0),NAME='Width',LABEL='Width of data'
HDF_SD_DIMSET,HDF_SD_DIMGETID(sds_id,1),NAME='Height',LABEL='Height of data'
;xn和yn分别是行、列的初始循环次数
xn = 0
yn = 0
;计算循环次数,- 目的为了进度条正确显示
IF(dims[1]/tileSize[1] EQ 0 )AND(dims[0]/tileSize[0] EQ 0) THEN BEGIN
TotalNum = 1
ENDIF ELSE IF(dims[1]/tileSize[1] EQ 0 ) THEN BEGIN
TotalNum = FIX(dims[0]/tileSize[0])+1
ENDIF ELSE IF(dims[0]/tileSize[0] EQ 0 ) THEN BEGIN
TotalNum = FIX(dims[1]/tileSize[1])+1
ENDIF ELSE TotalNum = (FIX(dims[1]/tileSize[1])+1)*(FIX(dims[0]/tileSize[0])+1)
; 更新下进度条
IDLITWDPROGRESSBAR_SETVALUE, process, 1
DoneNum = 0
UpRate = 99/TotalNum
;分别在水平和竖直方向循环
WHILE(yn LT FIX(dims[1]/tileSize[1])) DO BEGIN
WHILE(xn LT FIX(dims[0]/tileSize[0])) DO BEGIN
;计算存储的数据块位置
loc = [tileSize[0]*xn,tileSize[1]*yn]
;提取数据相应位置数据
wtImg = image[loc[0]loc[0]+tilesize[0]-1),loc[1]loc[1]+tilesize[1]-1)]
;写入HDF文件中
HDF_SD_ADDDATA, sds_id, wtImg, $
START=loc, COUNT=tileSize
xn++
;更新进度条
DoneNum = DoneNum+1
IDLITWDPROGRESSBAR_SETVALUE, process, 1+UpRate*DoneNum
ENDWHILE
;
IF(dims[0] GT tileSize[0]*xn)THEN BEGIN
;计算存储的数据块位置
loc = [tileSize[0]*xn,tileSize[1]*yn]
;提取数据相应位置数据
wtImg = image[loc[0]dims[0]-1),loc[1]loc[1]+tilesize[1]-1)]
;写入HDF文件中,注意count的变化
HDF_SD_ADDDATA, sds_id, wtImg, $
START=loc, COUNT=SIZE(wtImg,/dimension)
ENDIF
;
xn = 0
yn++
;更新进度条
DoneNum = DoneNum+1
IDLITWDPROGRESSBAR_SETVALUE, process, 1+UpRate*DoneNum
ENDWHILE
; 最后一行不完整的部分
IF(dims[1] GT tileSize[1]*yn)THEN BEGIN
xn = 0
WHILE(xn LT FIX(dims[0] /tileSize[0])) DO BEGIN
;计算存储的数据块位置
loc = [tileSize[0]*xn,tileSize[1]*yn]
;提取数据相应位置数据
wtImg = image[loc[0]dims[0]-1),loc[1]dims[1]-1)]
;写入HDF文件中
HDF_SD_ADDDATA, sds_id, wtImg, $
START=loc, COUNT=SIZE(wtImg,/dimension)
xn++
;更新进度条
DoneNum = DoneNum+1
IDLITWDPROGRESSBAR_SETVALUE, process, 1+UpRate*DoneNum
ENDWHILE
ENDIF
;关闭HDF
HDF_SD_ENDACCESS,sds_id
HDF_SD_END,sd_id
IDLITWDPROGRESSBAR_SETVALUE, process, 100
;销毁没用的
WAIT,0.3
WIDGET_CONTROL,process,/Destroy
WIDGET_CONTROL, wtlb,/DESTROY
END
仿照示例,扩写.
仿照示例,扩写~
仿照示例写两个句子
根据示例仿写句子
如何写《入团申请书》示例
科学实验报告怎么写(相关文章示例)
在jsp中怎样用struts实现二级联动菜单呀?请给出示例源码,谢谢!!
请问初一英语日记如何写? 示例60词左右
仿照事例填空,示例:()心狗肺,十()九空—(引狼入室)
HDF是一种什么材料
请教高手:在jsp中怎样用struts实现二级联动菜单呀?请给出示例源码,谢谢!!
delphi 写的小游戏源码下载
vb.net写日历程序的源码!
根据示例,仿写对联 【写得越多且对者采纳哦】
源码!!
急求 asp 源码——新闻发布系统
仿照示例,发挥你的想象和联想,续写下边的句子.
帮忙写篇关于罗斯文示例数据库功能、特点、界面分析研究的论文吧
在ASP代码中,如何把数据库的记录Id写到链接路径上,示例:
个人简历示例
如何分块压缩文件
奇妙的分块问题
bt分块下载
什么是分块查找法