![](https://aar.chengxu.online/upload/files/20230807/1691420797.png)
做一些小工具的时候,偶尔会用到一些LOGO、图标、光标之类的小图片,把资源放在外面又显得不够简洁。
这时候,把图片文件转成代码嵌入到源文件中,也不失为一个不错的解决方案。
在aardio中,通过加密解密库crypt中的encodeBase64函数,可以把文件编码成可见的文本,把这段文本保存到源代码中。在需要用到图片资源的时候,再用decodeBase64解码还原。
这里的例子,演示了怎么编码、解码的过程,也顺便演示了怎么在树形视图treeview中,不同节点使用不用图标的方法。
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=959;bottom=759)
winform.add(
button={cls="button";text="加载图片并转码 =>";left=96;top=272;right=232;bottom=312;z=4};
button2={cls="button";text="=> 解码并显示图片";left=720;top=272;right=856;bottom=312;z=5};
button3={cls="button";text="解码图标并预览";left=552;top=680;right=704;bottom=712;z=11};
editBase64={cls="edit";left=248;top=56;right=704;bottom=312;edge=1;hscroll=1;multiline=1;vscroll=1;z=3};
editIcon={cls="edit";left=32;top=400;right=704;bottom=658;edge=1;hscroll=1;multiline=1;vscroll=1;z=10};
groupbox={cls="groupbox";text="图片和Base64互转";left=16;top=24;right=936;bottom=336;edge=1;z=2};
groupbox2={cls="groupbox";text="演示解码为图标";left=16;top=368;right=936;bottom=736;edge=1;z=1};
plusIcon={cls="plus";left=32;top=680;right=536;bottom=712;edge=1;repeat="center";z=13};
plusImage={cls="plus";left=32;top=56;right=232;bottom=256;edge=1;repeat="scale";z=8};
plusImgBase64={cls="plus";left=720;top=56;right=920;bottom=256;edge=1;repeat="scale";z=9};
static6={cls="static";left=16;top=944;right=80;bottom=968;transparent=1;z=7};
staticHexLen={cls="static";left=200;top=488;right=264;bottom=512;transparent=1;z=6};
treeview={cls="treeview";left=720;top=400;right=920;bottom=704;asel=false;bgcolor=16777215;edge=1;z=12}
)
/*}}*/
import crypt.bin;
winform.button.oncommand = function(id,event){
import fsys.dlg;
var path = fsys.dlg.open("图像文件|*.jpg;*.jpeg;*.bmp;*.gif;*.png;", , , winform)
if (path) {
winform.plusImage.background = path; //预览图片
var stream = ..string.load(path); //加载图片到数据流
var strBase64 = crypt.bin.encodeBase64( stream ); //base64编码
winform.editBase64.text = strBase64;
}
}
winform.button2.oncommand = function(id,event){
if (#winform.editBase64.text){
var bmpBase64 = crypt.bin.decodeBase64( winform.editBase64.text ); //base64编码解码为图片
winform.plusImgBase64.background = bmpBase64;
}
}
// 一个图标组图像
var base64Str = "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
D/wgxQbYWX/MG5zjW
BghbUBq06gCuDOAGCGnQCCFXRQlVQgYq6oAIuyGgN9FQTIFLUohjVKEcXqhA/rkoGt4SYH6mC0hv88gcrNYAbi2nMCewunm3UHzGNqUahLE1hFqDB/lgiVP5xzgfdDMAFOAACw4xTBW4hiw5EFwJ1KuQ8OzJWspLFSGg+6wNBSsAk57lC4dkTnzmIIQ8yoIHJlTWOQqKKFKWoUIUCsSFynWtdSeoyVn1QijXhq0D82irM8TWmtCIALlPlg10qxgQXm2AwC5BGphi0MWOdwUyLKQGbGqkHuFOAVtBIAzVWZLTO3KZLZWAAm0RgsTAlpzlnuwOr/36EaEajXVdLKrtW6Uis/mShWVFAXOL+LAE82CcGKim8gE7QAmsb29oE6wHoHnG6dy3pB6M70uzCdLvc7ehaVnqs16rUNAqTAVFgG1tW4cAmNGAKPhUC3LcK4AXx7WxBJXK5mgiVs8e0yH+NGeBtovdYiu2jXC1QE8EQwLbE0kjRZqfbNyUFtK2cUGMuwOEe2MAGIAixiEPcGBa0wAEoRjEK7HnPiYxtroFtsA6Q82LAxpgAM15IjQ0rYxrPlceZy3FsK7iY857oMIo5gJEjgJgXvOBcC0kAhy/gYRCD4AWWJXGSYnZfLDvZtBTp8jGdfNQjyy+yJR2xmkNcA5V00H+vIeQvCQmwuZU4Zsoc+LCVtTzBBnRkASRoiw7cghwP+DnQgR4LoVN1aEALetElbXSi3QJpTTno0irFNKYlYulLX+ADCFTJk19g05V4mSWn1qamL70XiyALRTDqkiND3WqWrFrTC7n1phWia1bzutebqrWwh12RL6OazMS2SEAAADs=";
winform.editIcon.text = base64Str;
winform.button3.oncommand = function(id,event){
if (#winform.editIcon.text){
var bmpBase64 = crypt.bin.decodeBase64( winform.editIcon.text ); //base64编码解码为图片
winform.plusIcon.background = bmpBase64; //预览图片
import win.imageList;
var imageList = win.imageList(16,16).add(bmpBase64); //创建图像列表
winform.treeview.setImageList( imageList,0/*_TVSIL_NORMAL*/ ); //给treeview指定图像列表
//创建treeview的项目
var t = {};
for(i=1;16;1){
table.push(t, {text="node" ++ i;iImage=i});
}
winform.treeview.insertItem(t);
}
}
winform.show();
win.loopMessage();