Posted by bianbian on 2008-05-01 09:25
本文Tags: format, IDL, 格式
也许跟FORTRAN差不多,那也是我为什么讨厌FORTRAN最大的原因
比如我要输出 YY-MM-DD hh_mm_ss 的时间格式:
IDL> PRINT, FORMAT= $
IDL> '(C(CYI2.2,"-",CMOI2.2,"-",CDI2.2,CHI3.2,"_",CMI2.2,"_",CSI2.2))', $
IDL> SYSTIME(/JULIAN)
OMG…..Orz……
标签:
format,
IDL,
格式遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in ENVI & IDL, Technology | 1 Comment »
Posted by bianbian on 2008-03-26 02:32
本文Tags: bug, IDL, IDLgrClipboard, 剪贴板
经过运行剪贴板监视器程序,我确认这是IDL的bug:如果用VC等其他语言调用IDL绘图,IDL并不能通过IDLgrClipboard对象将绘图结果保存到系统剪贴板(而在IDL的编辑器环境下运行,剪贴板是能得到绘图结果的)。
下面是英文描述:
IDLgrClipboard not works in callable mode (I use VC++ to execute IDL procedure to draw some plots, and copy the result to system clipboard). After running a system-clipboard-viewer-tool, I conclude it must be a bug (I tested with IDL6.2, IDL7.0).
oClipbrd = OBJ_NEW(’IDLgrClipboard’, DIMENSIONS=windowSize)
oClipbrd->Draw, oView
It works well under IDL-workbench, but when call from VC++, everything else goes OK except clipboard is empty.
解决办法:只好制定FILENAME参数,将结果保存到文件:
Finally, I have no choise but to save the drawing to a file, and it works:
oClipbrd->Draw, oView, FILENAME=’tempout.bmp’
标签:
bug,
IDL,
IDLgrClipboard,
剪贴板遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C/C++, ENVI & IDL, Technology | No Comments »
Posted by bianbian on 2008-03-21 12:06
本文Tags: IDL, MODIFYCT, 调色板
IDL的调色板功能很好很强大,以至于我还没琢磨透到底怎么调。。。。
不过一般都是用自己定义的调色板,就讲讲怎么往IDL里加入自己的调色板:
(加了以后在系统内LOADCT的时候,就能直接读取自定义的调色板,非常方便)
IDL提供了 MODIFYCT 命令用来更改或加入系统的预定义调色板:
MODIFYCT, Itab, Name, R, G, B [, FILE=filename]
Itab是索引值,0-40是系统的,一般都要41开始
Name是命名,32个字符内
R、G、B就是256长度的BYTE(单字节正数)数组
File是文件名,如果不制定就操作默认的(resouce目录的color1.tbl)
实际发现File指定了其他文件名,MODIFYCT会出错。看了源码,发现
MODIFYCT并没有处理文件读取错误(不存在)的异常。(不知道是不是IDL7.0的问题)
IDL也没有公开colortable的文件格式。不过我把MODIFYCT的源码结合color1.tbl
分析了一下,得到IDL的colortable文件格式:
总数 + R 256 + G 256 + B 256 + …. + 32长度名称(在文件末尾)
例(如果有两个表):[2][R..R][G..G][B..B][R..R][G..G][B..B][名称1][名称2]
这样就可以自己输出调色板文件了,不需要用IDL的默认文件(防止多用户冲突)。
之后可以用 LOADCT, 0, FILE=’mytable.tbl’ 动态载入
附C语言输出调色板文件代码:
- FILE *fp = fopen(file, "wb");
- BYTE n = 1;
- fwrite(&n, 1, 1, fp);
- fwrite(m_byteRGB, 1, 256 * 3, fp);
- fprintf(fp, "%-32s", "bianbian Default Table");
- fclose(fp);
标签:
IDL,
MODIFYCT,
调色板遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C/C++, ENVI & IDL, Technology | 2 Comments »
Posted by bianbian on 2008-03-17 01:29
本文Tags: IDL, row major, 存储, 行优先
IDL的数组在内存中存储还是以行顺序的,只是多维下标引用的时候列为先。即:
A=
[r r r]
[g g g]
[b b b]
在内存中是 rrrgggbbb(和C是一样的!fortran是rgbrgbrgb)
而引用的时候列在前:(C是行在前!)
A[0,0] A[1,0] A[2,0]
A[0,1] A[1,1] A[2,1]
A[0,2] A[1,2] A[2,2]
三维的情况和C也一样(注意,IDL和C唯一的差别就是IDL的下标列在前,然后是行);存储结构一致也就意味着C里的多维数组内存块可以直接丢到IDL里处理。其实我觉得IDL在下标上太小白了,干嘛不和C保持一致?某IDL大牛说:之所以下标在前,是为了更直观的知道X方向上有几个、Y方向上有几个。比如:A[3, 2],X方向有3个,Y方向有2个(2行3列):Is IDL column-major or row-major?
某本书(似乎国内的书都不认真写 - -)说IDL是列顺序的,这是不对的。可以拿三维数据做简单试验(也便于对下标引用理解):
IDL> a=bindgen(3,3,3)
IDL> print,a
0 1 2
3 4 5
6 7 8
9 10 11
12 13 14
15 16 17
18 19 20
21 22 23
24 25 26
IDL> print,a[1,0,*]
1
10
19
IDL> print,a[*,1,1]
12 13 14
标签:
IDL,
row major,
存储,
行优先遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C/C++, ENVI & IDL, Technology | 1 Comment »
Posted by bianbian on 2008-03-08 06:35
本文Tags: IDL, 截图, 测试
IDL的功能非常强大(尤其是画三维图上,等我文章出来再帖过),支持多操作系统。
Grads可以实现的IDL都能实现,IDL能实现的Grads不一定能。
只不过我们系里熟悉Grads的多一些,如果想用IDL,可能自己要多费点力气。
IDL7.0的编辑器基于eclipse,如果写过java的应该非常熟悉这个编辑器。比IDL6自带的编辑器好多了,确实非常方便。
下面是我简单的测试截图(为了图小一点,编辑器拖得比较小):
Splash画面:
|
欢迎画面:
|
编辑器(有语法提示,按F1可在IDE里嵌入帮助,见下图):
|
测试plot(右侧是嵌入的帮助)。中间是plot的默认结果,支持很多参数,效果可以改:
|
标签:
IDL,
截图,
测试遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in ENVI & IDL, Meteorology, Technology | No Comments »