|
2016-10-05 20:08:43
我一直在使用自己汉化的Origin 7.5版, 因为程序小, 界面比较简洁. 功能虽然少一些, 但绝大多数时候都够用了, 所以也就没有升级. 最近遇到一个作图需求, 要在一张图上画出很多条线, 并对每条线使用特定的颜色来代表其对应的时间值. 7.5版本的Origin支持使用调色板来定义线条的颜色, 但软件自带的那些调色板文件不一定能满足需求, 所以如果要自己定义调色板, 就必须能创建自己的调色板文件.
Origin的调色板文件放于Origin安装路径/Palettes中, 扩展名为PAL, 是一种二进制格式的文件, 所以你如果使用文本编辑器直接打开的话, 看到的是一堆乱码. 关于PAL文件格式的说明, 有份资料 Palette file 很详细, 还附有c#的示例代码. 网上还有一份matlab的转换代码 cmap2pal - Convert matlab colormap to binary .pal format, 也可参考.
用c, perl, python之类的语言来处理二进制文件还是比较容易处理的, 但我觉得它们还是太重了, 就想试着用bash脚本来处理下. 查了一下资料, bash脚本确实可以处理二进制文件, 方法是基于文件的十六进制文本.
Linux下处理二进制文件的工具主要有三个, hexdump, od和xxd, 前两个只能用于将二进制文件转化为十六进制文本进行查看, 而xxd即可用于查看, 也可用于将十六进制文本反向转换为二进制文件. 因此大多数时候只要使用xxd就能满足需要了. 还有一点需要注意的就是, hexdump和xxd显示二进制时, 大小端的顺序不同. 有人提到xxd显示时可以通过-e选项控制大小端的顺序, 但根据测试, 至少我安装的版本是不支持的, 可能只有打了补丁的才可以. 因此, 将十六进制文本转换为二进制文件时, 要注意字节的大小端顺序. 此外, dd可用于二进制文件的大小端反转, 有时也是一个解决方法.
下面是一个例子, 将matlab默认的调色板parula文件转换为origin的PAL文件.
parula调色板的定义如下
parula.dat | |
---|---|
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 | 00.20810.16630.529210.21160.18980.577720.21230.21380.627030.20810.23860.677140.19590.26450.727950.17070.29190.779260.12530.32420.830370.05910.35980.868380.01170.38750.882090.00600.40860.8828100.01650.42660.8786110.03290.44300.8720120.04980.45860.8641130.06290.47370.8554140.07230.48870.8467150.07790.50400.8384160.07930.52000.8312170.07490.53750.8263180.06410.55700.8240190.04880.57720.8228200.03430.59660.8199210.02650.61370.8135220.02390.62870.8038230.02310.64180.7913240.02280.65350.7768250.02670.66420.7607260.03840.67430.7436270.05900.68380.7254280.08430.69280.7062290.11330.70150.6859300.14530.70980.6646310.18010.71770.6424320.21780.72500.6193330.25860.73170.5954340.30220.73760.5712350.34820.74240.5473360.39530.74590.5244370.44200.74810.5033380.48710.74910.4840390.53000.74910.4661400.57090.74850.4494410.60990.74730.4337420.64730.74560.4188430.68340.74350.4044440.71840.74110.3905450.75250.73840.3768460.78580.73560.3633470.81850.73270.3498480.85070.72990.3360490.88240.72740.3217500.91390.72580.3063510.94500.72610.2886520.97390.73140.2666530.99380.74550.2403540.99900.76530.2164550.99550.78610.1967560.98800.80660.1794570.97890.82710.1633580.96970.84810.1475590.96260.87050.1309600.95890.89490.1132610.95980.92180.0948620.96610.95140.0755630.97630.98310.0538 |
转换脚本
binPal.bsh | |
---|---|
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | usage=">>>>>>>>>>>>>>>> binPal <<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>> Jicun LI <<<<<<<<<<<<<<<<>>>>>>>>>> 2016-10-04 10:17:36 <<<<<<<<<>> Usage: binPal <File>"
[[ $# -lt 1 ]] && { echo "$usage"; exit; }
File=$1# 获知数据行数
Nrgb=$(awk 'NF>1{N++} END{print N}'$File)
awk -v Nrgb=$Nrgb 'BEGIN {
# 计算文件长度, 数据长度
Nlen=4+4+4+4+2+2+ Nrgb *4
Ndat=8+Nrgb *4# RIFFprintf"%s", "52494646"# 文件长度, 大端小端转换
hex=sprintf("%08x", Nlen)
printf"%s", substr(hex,7,2)substr(hex,5,2)substr(hex,3,2)substr(hex,1,2)
# PAL dataprintf"%s", "50414C2064617461"# 数据长度, 大端小端转换
hex=sprintf("%08x", Ndat)
printf"%s", substr(hex,7,2)substr(hex,5,2)substr(hex,3,2)substr(hex,1,2)
printf"%s", "0003"# 颜色长度, 大端小端转换
hex=sprintf("%04x", Nrgb)
printf"%s", substr(hex,3,2)substr(hex,1,2)
}
NF>3 {
r=$2*255
g=$3*255
b=$4*255printf"%02x%02x%02x%02x", r, g, b, 0
}
'$File >_rgb.bin
xxd -r -p _rgb.bin >${File%.*}~bin.pal
rm -rf _rgb.bin
|
执行脚本后, 将得到的parula~bin.pal文件复制到Origin安装路径/Palettes下, 作图时就可以直接使用了.
可惜的是使用Origin7.5版本在做三维填色图时是没有办法直接使用这些调色板文件的, 只有通过originC代码才可以, 因此建议使用高版本的Origin来作这种图.
网络资料◆本文地址: http://jerkwin.github.io/2016/10/05/使用bash编辑二进制文件-创建Origin调色板文件/, 转载请注明◆
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2025-1-8 22:41
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社