1.文档提交
authorp15692025051 <846603105@qq.com>
Wed, 31 May 2023 03:47:39 +0000 (11:47 +0800)
committerp15692025051 <846603105@qq.com>
Wed, 31 May 2023 03:47:39 +0000 (11:47 +0800)
21 files changed:
1.doc/6_15交付媒体播放器交互.pdf [new file with mode: 0644]
1.doc/895X入门之开发环境安装/RV32-Toolchain-Setup_v1.2.6.zip [new file with mode: 0644]
1.doc/895X入门之开发环境安装/codeblocks-20.03-setup.zip [new file with mode: 0644]
1.doc/ui打包说明/895x_如何打包图片.docx [new file with mode: 0644]
1.doc/ui打包说明/image_tool_1.1.7/README.md [new file with mode: 0644]
1.doc/ui打包说明/image_tool_1.1.7/ResCompress.exe [new file with mode: 0644]
1.doc/ui打包说明/image_tool_1.1.7/image_tool.exe [new file with mode: 0644]
1.doc/ui打包说明/image_tool_1.1.7/release_log.md [new file with mode: 0644]
1.doc/ui打包说明/image_tool_1.1.7/section.json [new file with mode: 0644]
1.doc/ui添加说明/895x_如何添加新图片.docx [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/Mutiple_image_convert.png [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/Readme.md [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/img_conv_core.php [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/lvgl_image_convert.exe [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/php.exe [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/php.ini [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/php7.dll [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/php_fileinfo.dll [new file with mode: 0644]
1.doc/ui添加说明/Lvgl_image_convert_tool-master/php_gd2.dll [new file with mode: 0644]
1.doc/智能手表-网易云音乐交付.mg [new file with mode: 0644]
1.doc/阿里云穿戴蓝牙GATT规范_0531.pdf [new file with mode: 0644]

diff --git a/1.doc/6_15交付媒体播放器交互.pdf b/1.doc/6_15交付媒体播放器交互.pdf
new file mode 100644 (file)
index 0000000..e51a53a
Binary files /dev/null and "b/1.doc/6_15\344\272\244\344\273\230\345\252\222\344\275\223\346\222\255\346\224\276\345\231\250\344\272\244\344\272\222.pdf" differ
diff --git a/1.doc/895X入门之开发环境安装/RV32-Toolchain-Setup_v1.2.6.zip b/1.doc/895X入门之开发环境安装/RV32-Toolchain-Setup_v1.2.6.zip
new file mode 100644 (file)
index 0000000..d57edf5
Binary files /dev/null and "b/1.doc/895X\345\205\245\351\227\250\344\271\213\345\274\200\345\217\221\347\216\257\345\242\203\345\256\211\350\243\205/RV32-Toolchain-Setup_v1.2.6.zip" differ
diff --git a/1.doc/895X入门之开发环境安装/codeblocks-20.03-setup.zip b/1.doc/895X入门之开发环境安装/codeblocks-20.03-setup.zip
new file mode 100644 (file)
index 0000000..3079ee8
Binary files /dev/null and "b/1.doc/895X\345\205\245\351\227\250\344\271\213\345\274\200\345\217\221\347\216\257\345\242\203\345\256\211\350\243\205/codeblocks-20.03-setup.zip" differ
diff --git a/1.doc/ui打包说明/895x_如何打包图片.docx b/1.doc/ui打包说明/895x_如何打包图片.docx
new file mode 100644 (file)
index 0000000..2f2d69f
Binary files /dev/null and "b/1.doc/ui\346\211\223\345\214\205\350\257\264\346\230\216/895x_\345\246\202\344\275\225\346\211\223\345\214\205\345\233\276\347\211\207.docx" differ
diff --git a/1.doc/ui打包说明/image_tool_1.1.7/README.md b/1.doc/ui打包说明/image_tool_1.1.7/README.md
new file mode 100644 (file)
index 0000000..b772336
--- /dev/null
@@ -0,0 +1,61 @@
+# 常用命令
+
+分为 lv 图片转换与 bin 打包,两者可以合并使用;下面有简单介绍,更多详情请查看 `image_tool.exe --help`
+
+一个完整的使用示例
+
+```shell
+./image_tool.exe --path res0 --recursive --conv-type jpg,png --conv-color-type RGB565 --pack-type bin --pack-cheader-name res0.h --pack-cheader-value-wrapper MACRO --pack-bheader-name res0.bin --pack-bheader-size --pack-bheader-checksum --pack-preprocess ./ResCompress.exe
+
+./image_tool.exe --path res1 --recursive --conv-type jpg,png --conv-color-type RGB565 --pack-type bin --pack-cheader-name res1.h --pack-cheader-value-wrapper MACRO --pack-bheader-name res1.bin --pack-bheader-size --pack-bheader-checksum --pack-preprocess ./ResCompress.exe
+
+./image_tool.exe --path res2 --recursive --pack-type mp3 --pack-cheader-name res2.h --pack-cheader-value-wrapper MACRO --pack-bheader-name res2.bin --pack-cheader-keep-file-type --pack-cheader-macro-upper --pack-cheader-res-name-prefix RES_BUF_ --pack-cheader-res-size --pack-cheader-res-size-prefix RES_LEN_ --pack-bheader-size --pack-bheader-checksum
+
+./image_tool.exe --path . --pack-type bin --pack-cheader-name res --pack-bheader-name res.bin --pack-cheader-macro-upper --pack-section-file section.json
+```
+
+## lv 图片转换
+
+```shell
+image_tool.exe --path tmp --recursive --conv-type jpg,png --conv-color-type RGB565
+```
+
+## bin 打包
+
+### 简单的 bin 打包
+
+打包 images 下的所有 bin 文件,头部添加长度与校验和,长度不包含头的长度;并生成头文件与打包后的 bin 文件
+
+```shell
+image_tool.exe --path images --recursive --pack-type bin --pack-cheader-name ui --pack-cheader-value-wrapper MACRO --pack-bheader-name res.bin --pack-bheader-size --pack-bheader-checksum
+```
+
+### 指定区域的 bin 打包
+
+在上面的基础上,通过 section.json 文件,指定 bin 文件存储区域的位置与大小;
+
+json 的格式如下;区域名写在 `index` 中,然后区域的具体描述写在下方,需要包含 `file` `addr` `len` 三个部分的描述,`file` 为 bin 文件的名字,`addr` 为区域开始位置,`len` 为区域长度;`addr` 与 `len` 都需要为十六进制
+
+区域中,没有数据的部分会填充 `0xff`,但是也只是填充在区域中剩余的部分;比如 `res0` 中,`file` 的长度只有 0x100,那么只会从 0x100 开始填充 0xff,填充到末尾的 0x30000 前的地址
+
+```json
+{
+    "index": ["res0", "res1"],
+    "res0": {
+        "file": "test1.bin",
+        "addr": "0x0",
+        "len": "0x30000"
+    },
+    "res1": {
+        "file": "test2.bin",
+        "addr": "0x50000",
+        "len": "0x30000"
+    }
+}
+```
+
+调用时通过 `--pack-section-file` 指定具体的文件名
+
+```shell
+image_tool.exe --path . --pack-type bin --pack-cheader-name ui --pack-cheader-value-wrapper MACRO --pack-bheader-name res.bin --pack-bheader-size --pack-bheader-checksum --pack-section-file section.json
+```
diff --git a/1.doc/ui打包说明/image_tool_1.1.7/ResCompress.exe b/1.doc/ui打包说明/image_tool_1.1.7/ResCompress.exe
new file mode 100644 (file)
index 0000000..13a0a36
Binary files /dev/null and "b/1.doc/ui\346\211\223\345\214\205\350\257\264\346\230\216/image_tool_1.1.7/ResCompress.exe" differ
diff --git a/1.doc/ui打包说明/image_tool_1.1.7/image_tool.exe b/1.doc/ui打包说明/image_tool_1.1.7/image_tool.exe
new file mode 100644 (file)
index 0000000..a826930
Binary files /dev/null and "b/1.doc/ui\346\211\223\345\214\205\350\257\264\346\230\216/image_tool_1.1.7/image_tool.exe" differ
diff --git a/1.doc/ui打包说明/image_tool_1.1.7/release_log.md b/1.doc/ui打包说明/image_tool_1.1.7/release_log.md
new file mode 100644 (file)
index 0000000..bb5c1ef
--- /dev/null
@@ -0,0 +1,55 @@
+# 更新说明
+
+## 1.1.7
+
++ 修复lv转图的问题
+
+## 1.1.6
+
++ 生成的头文件中,res name 与 res size 可以通过 `--pack-cheader-res-name-prefix` `--pack-cheader-res-name-suffix` `--pack-cheader-res-size-prefix` `--pack-cheader-res-size-suffix` 配置前后缀,res size 可以通过 `--pack-cheader-res-size` 开启
++ 添加音频打包的示例
+
+## 1.1.5
+
++ 优化错误信息的输出
+
+## 1.1.4
+
++ 修复没有使能 bheader-size 的时候,生成的头文件偏移错误
++ 修复分段打包 bin 文件时,生成的头文件中的长度宏的问题
+
+## 1.1.3
+
++ bin 分段打包的时候,支持头文件中,资源的基地址自定义,通过在配置文件中添加 `base_addr` 键值对实现
++ bin 打包生成的资源地址宏名后,添加 `_ADDR` 后缀
+
+## 1.1.2
+
++ 分段打包生成的头文件,增加宏指定实际长度
+
+## 1.1.1
+
++ 修复通过 section.json 打包生成的头文件,偏移地址存在的问题
+
+## 1.1.0
+
++ 全部程序完成重写,减少可执行文件的体积,提升运行速度
++ 支持 bin 分段打包,需要配置 section.json 文件
+
+## 1.0.10
+
++ 重写了转图的 lv_img_conv.exe,现在转图速度起码10倍的提升
+
+## 1.0.9
+
++ 修复生成的 bin 中的 file_size 计算错误
++ 默认 bin 中的 file_size 不包含头长度,需要包含头长度的话可以使能 `--file_size_contain_header`
+
+## 1.0.8
+
++ 修复不转图时,未配置 `--header_macro_upper` 时,头文件名的宏也转大写的问题
+
+## 1.0.7
+
++ 默认头文件的宏名不再大写,需要大写可以配置 `--header_macro_upper`
++ 头文件中的地址前,没有宏时,默认不再添加括号;从 `#define RES (1)` 转为 `#define RES 1`  
diff --git a/1.doc/ui打包说明/image_tool_1.1.7/section.json b/1.doc/ui打包说明/image_tool_1.1.7/section.json
new file mode 100644 (file)
index 0000000..8abeb95
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "base_addr": "0x1000",
+    "index": ["res0", "res1"],
+    "res0": {
+        "file": "res0.bin",
+        "addr": "0x0",
+        "len": "0x40000"
+    },
+    "res1": {
+        "file": "res1.bin",
+        "addr": "0x50000",
+        "len": "0x40000"
+    }
+}
diff --git a/1.doc/ui添加说明/895x_如何添加新图片.docx b/1.doc/ui添加说明/895x_如何添加新图片.docx
new file mode 100644 (file)
index 0000000..ba607f2
Binary files /dev/null and "b/1.doc/ui\346\267\273\345\212\240\350\257\264\346\230\216/895x_\345\246\202\344\275\225\346\267\273\345\212\240\346\226\260\345\233\276\347\211\207.docx" differ
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/Mutiple_image_convert.png b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/Mutiple_image_convert.png
new file mode 100644 (file)
index 0000000..ea3d715
Binary files /dev/null and "b/1.doc/ui\346\267\273\345\212\240\350\257\264\346\230\216/Lvgl_image_convert_tool-master/Mutiple_image_convert.png" differ
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/Readme.md b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/Readme.md
new file mode 100644 (file)
index 0000000..de3738b
--- /dev/null
@@ -0,0 +1,75 @@
+2020-01-08:
+
+修复了工具当前预览的图片被锁定无法外部修改的问题
+
+2019-12-22:
+
+增加了图片批量转换,并将图片名称作为转换后的文件名和变量名
+1. 由于图片名可能作为转换后的变量名,增加了对图片名的规范检测,大体同前一个版本的lv_img_dsc_t检测一致
+2. 根据lvgl支持的图片种类做了分类
+3. 对各个图片加了转换前的检测结果及转换后的转换结果的tip提示
+大致如下:
+
+
+![批量转换示意图](https://images.gitee.com/uploads/images/2020/0423/101323_df096bf2_5033673.png)
+
+
+2019-11-20:
+
+增加了对转换操作结果的验证,避免了转换图片时界面卡死的问题
+
+添加了原php环境下的内存限制设置参数
+
+对于转换提示的问题:
+
+1.在转换图片时,提示转换成功,但找不到转换后的文件
+
+    原因:图片分辨率过大,修改php环境内存限制参数
+               
+       解决办法:修改转换工具根目录下php.ini配置文件 
+```php
+memory_limit = _xxx_M  //      _xxx_ 根据实际使用修改该值,图片分辨率越大,需要设置的值就越大
+```
+
+2.在转换图片时,提示转换失败
+               
+    原因1:图片分辨率过大,转换时间太长(这么大的图片……),超时了
+    原因2:图片资源编码问题,测试发现截屏保存的图片不能直接转换,否则转换失败,先使用图片编辑工具打开,然后另存就可以了
+  
+ 目前发现以上问题
+
+2019-11-16:
+
+## 界面如下
+设置输出文件类型,c测试没问题,bin格式没用到,如果有用到的朋友欢迎反馈
+
+![设置输出文件类型](https://images.gitee.com/uploads/images/2020/0423/100538_24dd6afd_5033673.png)
+
+转换方式跟官方网页一样
+
+![设置图片转换方式](https://images.gitee.com/uploads/images/2020/0423/100538_51e7fad4_5033673.png)
+
+lv_img_dsc_t,为生成的c文件下该图片资源的名字
+
+
+2019-11-15:
+
+## 说明
+
+软件为基于LVGL离线版图片转换封装的小工具,避免了常使用界面工具的朋友操作控制台指令的不便利
+
+运行环境为windows
+
+修改了原官方离线版php文件接口,便于保存到指定目录
+
+避免计算机没有php环境,在工具所在目录配置了一个php小环境(人懒,php不懂瞎裁)
+
+
+
+## 初衷
+
+手头项目用到lvgl做界面设计,前期在lvgl官网做图片转换,感觉挺好 但界面嘛,美观度重口难调,所以这周把界面元素重设计了一遍, 然后昨天在官网做转换时,下载n次失败……所以就有了这个基于官方离线版封装的转换工具,有问题可以通过软件界面的qq和邮箱联系我
+
+## 后续
+
+如果后面有时间或者用到的话,加一个批量转换的。。。这个先用吧
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/img_conv_core.php b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/img_conv_core.php
new file mode 100644 (file)
index 0000000..31c252b
--- /dev/null
@@ -0,0 +1,828 @@
+<?php
+
+class Converter {
+    var $dith;      /*Dithering enable/disable*/
+    var $w;         /*Image width*/
+    var $h;         /*Image height*/
+    var $cf;        /*Color format*/
+    var $alpha;     /*Add alpha byte or not*/
+    var $chroma;    /*Chroma keyed?*/
+    var $d_out;     /*Output data (result)*/
+    var $img;       /*Image resource*/
+    var $out_name;  /*Name of the output file*/
+       var $output_dir;/*Dir of the output file*/
+    var $path;      /*Path to the image file*/
+
+    /*Helper variables*/
+    var $r_act;
+    var $b_act;
+    var $g_act;
+
+    /*For dithering*/
+    var $r_earr;  /*Classification error for next row of pixels*/
+    var $g_earr;
+    var $b_earr;
+
+    var $r_nerr;  /*Classification error for next pixel*/
+    var $g_err;
+    var $b_nerr;
+
+    const CF_TRUE_COLOR_332 = 0;      /*Helper formats. Used internally*/
+    const CF_TRUE_COLOR_565 = 1;
+    const CF_TRUE_COLOR_565_SWAP = 2;
+    const CF_TRUE_COLOR_888 = 3;
+    const CF_ALPHA_1_BIT = 4;
+    const CF_ALPHA_2_BIT = 5;
+    const CF_ALPHA_4_BIT = 6;
+    const CF_ALPHA_8_BIT = 7;
+    const CF_INDEXED_1_BIT = 8;
+    const CF_INDEXED_2_BIT = 9;
+    const CF_INDEXED_4_BIT = 10;
+    const CF_INDEXED_8_BIT = 11;
+    const CF_RAW = 12;
+    const CF_RAW_ALPHA = 13;
+    const CF_RAW_CHROMA = 12;
+
+    const CF_TRUE_COLOR = 100;          /*Helper formats is C arrays contains all treu color formats (usin in "download")*/
+    const CF_TRUE_COLOR_ALPHA = 101;
+    const CF_TRUE_COLOR_CHROMA = 102;
+
+    /**
+     * @param path the image file
+     * @param real_name the real image file name (different in online mode)
+     * @param out_name name of the output file
+     * @param dith 1: dither enabled; 0: disabled
+     * @param cf color format
+     */
+    function __construct ($path, $real_name,$output, $out_name ,$dith) {
+        $this->dith = $dith;
+        $this->out_name = $out_name;
+        $this->path = $path;
+               $this->output_dir = $output;
+
+        $size = getimagesize($path);
+        $this->w = $size[0];
+        $this->h = $size[1];
+
+        $ext = pathinfo($real_name, PATHINFO_EXTENSION);
+        if(!strcmp(strtolower($ext), "png")) $this->img = imagecreatefrompng($path);
+        else if(!strcmp(strtolower($ext), "bmp")) $this->img = imagecreatefrombmp($path);
+        else if(!strcmp(strtolower($ext), "jpg")) $this->img = imagecreatefromjpeg($path);
+        else if(!strcmp(strtolower($ext), "jpeg")) $this->img = imagecreatefromjpeg($path);
+        else {
+            echo("$ext is a not supported image type. use png, jpg, jpeg or bmp");
+            exit(1);
+        }
+
+        $this->r_earr = array();  /*Classification error for next row of pixels*/
+        $this->g_earr = array();
+        $this->b_earr = array();
+
+        if($this->dith) {
+            for($i = 0; $i < $this->w + 2; ++$i){
+                $this->r_earr[$i] = 0;
+                $this->g_earr[$i] = 0;
+                $this->b_earr[$i] = 0;
+            }
+        }
+
+        $this->r_nerr = 0;  /*Classification error for next pixel*/
+        $this->g_nerr = 0;
+        $this->b_nerr = 0;
+    }
+
+    function convert($cf, $alpha = 0) {
+        $this->cf = $cf;
+        $this->d_out = array();
+        $this->alpha = $alpha;
+
+        if($this->cf == self::CF_RAW || $this->cf == self::CF_RAW_ALPHA || $this->cf == self::CF_RAW_CHROMA) {
+            $myfile = fopen($this->path, "r") or die("Unable to open file!");
+            $this->d_out = unpack('C*', fread($myfile, filesize($this->path)));
+            fclose($myfile);
+            return;
+        }
+
+        $palette_size = 0;
+        if($this->cf == self::CF_INDEXED_1_BIT) $palette_size = 2;
+        if($this->cf == self::CF_INDEXED_2_BIT) $palette_size = 4;
+        if($this->cf == self::CF_INDEXED_4_BIT) $palette_size = 16;
+        if($this->cf == self::CF_INDEXED_8_BIT) $palette_size = 256;
+
+        if($palette_size) {
+            $img_tmp = imagecreatetruecolor($this->w, $this->h);
+            imagecopy ($img_tmp, $this->img, 0 , 0 , 0 , 0, $this->w , $this->h);
+            imagetruecolortopalette($this->img, false, $palette_size);
+            $real_palette_size = imagecolorstotal($this->img);                          /*The real number of colos in the image's palette*/
+               for($i = 0; $i < $palette_size; $i++) {
+                   if($i < $real_palette_size) {
+                       $c = imagecolorsforindex ($this->img , $i);
+                    array_push($this->d_out, $c['blue'], $c['green'], $c['red'], 0xFF);
+                } else {
+                    array_push($this->d_out, 0xFF, 0xFF, 0xFF, 0xFF);
+                }
+               }
+        }
+
+        /*Convert all the pixels*/
+        for($y = 0; $y < $this->h; $y++) {
+            $this->dith_reset();
+
+            for($x = 0; $x < $this->w; ++$x){
+                $this->conv_px($x, $y);
+            }
+        }
+
+        /*Revert the original image if it was converted to indexed*/
+        if($palette_size) {
+            imagecopy ($this->img, $img_tmp,  0 , 0 , 0 , 0 , $this->w , $this->h);
+        }
+    }
+
+    function format_to_c_array() {
+
+        $c_array = "";
+        $i = 0;
+        $y_end = $this->h;
+        $x_end = $this->w;
+
+        if($this->cf == self::CF_TRUE_COLOR_332) {
+            $c_array .= "\n#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8";
+            if(!$this->alpha) $c_array .= "\n  /*Pixel format: Red: 3 bit, Green: 3 bit, Blue: 2 bit*/";
+            else  $c_array .= "\n  /*Pixel format: Alpha 8 bit, Red: 3 bit, Green: 3 bit, Blue: 2 bit*/";
+        } else if($this->cf == self::CF_TRUE_COLOR_565) {
+            $c_array .= "\n#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP == 0";
+            if(!$this->alpha) $c_array .= "\n  /*Pixel format: Red: 5 bit, Green: 6 bit, Blue: 5 bit*/";
+            else $c_array .= "\n  /*Pixel format: Alpha 8 bit, Red: 5 bit, Green: 6 bit, Blue: 5 bit*/";
+        }  else if($this->cf == self::CF_TRUE_COLOR_565_SWAP) {
+            $c_array .= "\n#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP != 0";
+            if(!$this->alpha) $c_array .=  "\n  /*Pixel format: Red: 5 bit, Green: 6 bit, Blue: 5 bit BUT the 2 bytes are swapped*/";
+            else $c_array .= "\n  /*Pixel format: Alpha 8 bit, Red: 5 bit, Green: 6 bit, Blue: 5 bit  BUT the 2  color bytes are swapped*/";
+        }  else if($this->cf == self::CF_TRUE_COLOR_888) {
+            $c_array .= "\n#if LV_COLOR_DEPTH == 32";
+            if(!$this->alpha) $c_array .= "\n  /*Pixel format: Fix 0xFF: 8 bit, Red: 8 bit, Green: 8 bit, Blue: 8 bit*/";
+            else "\n  /*Pixel format: Alpha 8 bit, Red: 8 bit, Green: 8 bit, Blue: 8 bit*/";
+        } else if($this->cf == self::CF_INDEXED_1_BIT) {
+            $c_array .= "\n";
+            for($p = 0; $p < 2; $p ++) {
+                $c_array .= "  0x" . str_pad(dechex($this->d_out[$p * 4 + 0]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 1]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 2]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 3]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "\t/*Color of index $p*/\n";
+            }
+
+            $i = $p * 4;
+        }
+        else if($this->cf == self::CF_INDEXED_2_BIT) {
+            $c_array .= "\n";
+            for($p = 0; $p < 4; $p ++) {
+                $c_array .= "  0x" . str_pad(dechex($this->d_out[$p * 4 + 0]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 1]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 2]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 3]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "\t/*Color of index $p*/\n";
+            }
+
+            $i = $p * 4;
+        }
+        else if($this->cf == self::CF_INDEXED_4_BIT) {
+            $c_array .= "\n";
+            for($p = 0; $p < 16; $p ++) {
+                $c_array .= "  0x" . str_pad(dechex($this->d_out[$p * 4 + 0]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 1]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 2]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 3]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "\t/*Color of index $p*/\n";
+            }
+
+            $i = $p * 4;
+        }
+        else if($this->cf == self::CF_INDEXED_8_BIT) {
+            $c_array .= "\n";
+            for($p = 0; $p < 256; $p ++) {
+                $c_array .= "  0x" . str_pad(dechex($this->d_out[$p * 4 + 0]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 1]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 2]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "0x" . str_pad(dechex($this->d_out[$p * 4 + 3]), 2, '0', STR_PAD_LEFT) . ", ";
+                $c_array .= "\t/*Color of index $p*/\n";
+            }
+
+            $i = $p * 4;
+        }
+         else if($this->cf == self::CF_RAW || $this->cf == self::CF_RAW_ALPHA || $this->cf == self::CF_RAW_CHROMA) {
+            $y_end = 1;
+            $x_end = count($this->d_out);
+            $i = 1;
+         }
+
+
+        for($y = 0; $y < $y_end; $y++) {
+            $c_array .= "\n  ";
+            for($x = 0; $x < $x_end; $x++) {
+                if($this->cf == self::CF_TRUE_COLOR_332) {
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";  $i++;
+                    if($this->alpha) {
+                        $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";
+                        $i++;
+                    }
+                }
+                else if($this->cf == self::CF_TRUE_COLOR_565 || $this->cf == self::CF_TRUE_COLOR_565_SWAP) {
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";  $i++;
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";  $i++;
+                    if($this->alpha) {
+                        $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";
+                        $i++;
+                    }
+                }
+                else if($this->cf == self::CF_TRUE_COLOR_888) {
+
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";  $i++;
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";  $i++;
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";  $i++;
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";  $i++;
+                }
+                else if($this->cf == self::CF_ALPHA_1_BIT || $this->cf == self::CF_INDEXED_1_BIT) {
+                    if(($x & 0x7) == 0) {
+                        $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";
+                        $i++;
+                    }
+                }
+                else if($this->cf == self::CF_ALPHA_2_BIT || $this->cf == self::CF_INDEXED_2_BIT) {
+                    if(($x & 0x3) == 0) {
+                        $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";
+                        $i++;
+                    }
+                }
+                else if($this->cf == self::CF_ALPHA_4_BIT || $this->cf == self::CF_INDEXED_4_BIT) {
+                    if(($x & 0x1) == 0) {
+                        $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";
+                        $i++;
+                    }
+                }
+                else if($this->cf == self::CF_ALPHA_8_BIT || $this->cf == self::CF_INDEXED_8_BIT) {
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";
+                    $i++;
+                }
+                else if($this->cf == self::CF_RAW || $this->cf == self::CF_RAW_ALPHA || $this->cf == self::CF_RAW_CHROMA) {
+                    $c_array .= "0x" . str_pad(dechex($this->d_out[$i]), 2, '0', STR_PAD_LEFT) . ", ";
+                    if($i != 0 && (($i % 16) == 0)) $c_array .= "\n  ";
+                    $i++;
+                }
+            }
+        }
+
+        if($this->cf == self::CF_TRUE_COLOR_332 || $this->cf == self::CF_TRUE_COLOR_565 || $this->cf == self::CF_TRUE_COLOR_565_SWAP || $this->cf == self::CF_TRUE_COLOR_888) {
+            $c_array .= "\n#endif";
+        }
+
+        return $c_array;
+
+    }
+
+    function get_c_header() {
+        $c_header =
+        "#include \"lvgl/lvgl.h\"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+";
+        $attr_name = "LV_ATTRIBUTE_IMG_" . strtoupper($this->out_name); 
+        $c_header .= 
+"#ifndef $attr_name
+#define $attr_name
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN $attr_name uint8_t " . $this->out_name . "_map[] = {";
+
+        return $c_header;
+    }
+
+    function get_c_footer($cf) {
+        $c_footer =
+        "\n};\n
+const lv_img_dsc_t " . $this->out_name . " = {
+  .header.always_zero = 0,
+  .header.w = " . $this->w . ",
+  .header.h = " . $this->h . ",\n";
+
+      if($cf == self::CF_TRUE_COLOR) $c_footer .= "  .data_size = " . $this->w * $this->h . " * LV_COLOR_SIZE / 8,\n  .header.cf = LV_IMG_CF_TRUE_COLOR,";
+      else if($cf == self::CF_TRUE_COLOR_ALPHA) $c_footer .= "  .data_size = " . $this->w * $this->h . " * LV_IMG_PX_SIZE_ALPHA_BYTE,\n  .header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,";
+      else if($cf == self::CF_TRUE_COLOR_CHROMA) $c_footer .= "  .data_size = " . $this->w * $this->h . " * LV_COLOR_SIZE / 8,\n  .header.cf = LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED,";
+      else if($cf == self::CF_ALPHA_1_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_ALPHA_1BIT,";
+      else if($cf == self::CF_ALPHA_2_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_ALPHA_2BIT,";
+      else if($cf == self::CF_ALPHA_4_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_ALPHA_4BIT,";
+      else if($cf == self::CF_ALPHA_8_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_ALPHA_8BIT,";
+      else if($cf == self::CF_INDEXED_1_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_INDEXED_1BIT,";
+      else if($cf == self::CF_INDEXED_2_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_INDEXED_2BIT,";
+      else if($cf == self::CF_INDEXED_4_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_INDEXED_4BIT,";
+      else if($cf == self::CF_INDEXED_8_BIT) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_INDEXED_8BIT,";
+      else if($cf == self::CF_RAW) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_RAW,";
+      else if($cf == self::CF_RAW_ALPHA) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_RAW_ALPHA,";
+      else if($cf == self::CF_RAW_CHROMA) $c_footer .= "  .data_size = " . count($this->d_out) . ",\n  .header.cf = LV_IMG_CF_RAW_CHROMA_KEYED,";
+
+    $c_footer .= "\n  .data = " . $this->out_name . "_map,
+};\n";
+
+        return $c_footer;
+    }
+
+    function download_c($name, $cf = -1, $content = ""){
+      global $offline;
+
+      if(strlen($content) < 1) {
+        $content = $this->format_to_c_array();
+      }
+
+      if($cf < 0) $cf = $this->cf;
+
+        $out = $this->get_c_header() . $content . "" . $this->get_c_footer($cf);
+        $name = $name . ".c";
+
+      if($offline){
+               $name = $this->output_dir.$name;
+        $file = fopen($name, "w");
+        fwrite($file, $out);
+        fclose($file);
+      }
+      else{
+        header('Content-Type: application/text');
+        header('Content-disposition: attachment; filename='.$name);
+        header('Content-Length: ' . strlen($out));
+
+        echo($out);
+
+      }
+    }
+
+
+    function download_bin($name, $cf = -1, $content = 0){
+      global $offline;
+
+      if($content == 0) {
+        $content = $this->d_out;
+      }
+
+      if($cf < 0) $cf = $this->cf;
+      $name .= ".bin";
+
+      $lv_cf = 4;               /*Color format in LittlevGL*/
+      switch($cf) {
+        case self::CF_TRUE_COLOR:
+            $lv_cf = 4; break;
+        case self::CF_TRUE_COLOR_ALPHA:
+            $lv_cf = 5; break;
+        case self::CF_TRUE_COLOR_CHROMA:
+            $lv_cf = 6; break;
+        case self::CF_INDEXED_1_BIT:
+            $lv_cf = 7; break;
+        case self::CF_INDEXED_2_BIT:
+            $lv_cf = 8; break;
+        case self::CF_INDEXED_4_BIT:
+            $lv_cf = 9; break;
+        case self::CF_INDEXED_8_BIT:
+            $lv_cf = 10; break;
+        case self::CF_ALPHA_1_BIT:
+            $lv_cf = 11; break;
+        case self::CF_ALPHA_2_BIT:
+            $lv_cf = 12; break;
+        case self::CF_ALPHA_4_BIT:
+            $lv_cf = 13; break;
+        case self::CF_ALPHA_8_BIT:
+            $lv_cf = 14; break;
+      }
+
+
+      $header = $lv_cf + ($this->w << 10) + ($this->h << 21);
+      $header_bin = pack("V", $header);
+
+      $content = pack("C*", ...$content);
+
+      if($offline){
+               $name = $this->output_dir.$name;
+        $file = fopen($name, "w");
+        fwrite($file, $header_bin);
+        fwrite($file, $content);
+        fclose($file);
+      }
+      else{
+        $len = strlen($content) + 4;
+        header('Content-Type: application/text');
+        header('Content-disposition: attachment; filename='.$name);
+        header('Content-Length:' . $len);
+        echo($header_bin[0]);
+        echo($header_bin[1]);
+        echo($header_bin[2]);
+        echo($header_bin[3]);
+        echo($content);
+
+
+      }
+    }
+
+    private function conv_px($x, $y) {
+        $c = imagecolorat($this->img, $x, $y);
+        if($this->alpha){
+            $a = ($c & 0xff000000) >> 23;       /*Alpha is 7 bit*/
+            if($a & 0x02) $a |= 0x01;           /*Repeate the last bit: 0000000 -> 00000000; 1111110 -> 11111111*/
+            $a = 255 - $a;
+        } else {
+            $a = 0xff;
+        }
+        $r = ($c & 0x00ff0000) >> 16;
+        $g = ($c & 0x0000ff00) >> 8;
+        $b = ($c & 0x000000ff) >> 0;
+
+        $this->dith_next($r, $g, $b, $x);
+
+        if($this->cf == self::CF_TRUE_COLOR_332) {
+           $c8 = ($this->r_act) | ($this->g_act >> 3) | ($this->b_act >> 6);   //RGB332
+            array_push($this->d_out, $c8);
+            if($this->alpha) array_push($this->d_out, $a);
+        } else if($this->cf == self::CF_TRUE_COLOR_565) {
+          $c16 = (($this->r_act) << 8) | (($this->g_act) << 3) | (($this->b_act) >> 3);        //RGR565
+            array_push($this->d_out, $c16 & 0xFF);
+            array_push($this->d_out, ($c16 >> 8) & 0xFF);
+            if($this->alpha) array_push($this->d_out, $a);
+        } else if($this->cf == self::CF_TRUE_COLOR_565_SWAP) {
+            $c16 = (($this->r_act) << 8) | (($this->g_act) << 3) | (($this->b_act) >> 3);      //RGR565
+            array_push($this->d_out, ($c16 >> 8) & 0xFF);
+            array_push($this->d_out, $c16 & 0xFF);
+            if($this->alpha) array_push($this->d_out, $a);
+        } else if($this->cf == self::CF_TRUE_COLOR_888) {
+            array_push($this->d_out, $this->b_act);
+            array_push($this->d_out, $this->g_act);
+            array_push($this->d_out, $this->r_act);
+            array_push($this->d_out, $a);
+        } else if($this->cf == self::CF_ALPHA_1_BIT) {
+            $w = $this->w >> 3;
+            if($this->w & 0x07) $w++;
+            $p = $w * $y + ($x >> 3);
+            if(!isset($this->d_out[$p])) $this->d_out[$p] = 0;          /*Clear the bits first*/
+            if($a > 0x80) {
+                $this->d_out[$p] |= 1 << (7 - ($x & 0x7));
+            }
+        }
+        else if($this->cf == self::CF_ALPHA_2_BIT) {
+            $w = $this->w >> 2;
+            if($this->w & 0x03) $w++;
+
+            $p = $w * $y + ($x >> 2);
+            if(!isset($this->d_out[$p])) $this->d_out[$p] = 0;          /*Clear the bits first*/
+            $this->d_out[$p] |= ($a >> 6) << (6 - (($x & 0x3) * 2));
+        }
+        else if($this->cf == self::CF_ALPHA_4_BIT) {
+            $w = $this->w >> 1;
+            if($this->w & 0x01) $w++;
+
+            $p = $w * $y + ($x >> 1);
+            if(!isset($this->d_out[$p])) $this->d_out[$p] = 0;          /*Clear the bits first*/
+            $this->d_out[$p] |= ($a >> 4) << (4 - (($x & 0x1) * 4));
+        }
+        else if($this->cf == self::CF_ALPHA_8_BIT) {
+            $p = $this->w * $y + $x;
+            $this->d_out[$p] = $a;
+        }
+        else if($this->cf == self::CF_INDEXED_1_BIT) {
+            $w = $this->w >> 3;
+            if($this->w & 0x07) $w++;
+
+            $p = $w * $y + ($x >> 3) + 8;                       /* +8 for the palette*/
+            if(!isset($this->d_out[$p])) $this->d_out[$p] = 0;          /*Clear the bits first*/
+            $this->d_out[$p] |= ($c & 0x1) << (7 - ($x & 0x7));
+        }
+        else if($this->cf == self::CF_INDEXED_2_BIT) {
+            $w = $this->w >> 2;
+            if($this->w & 0x03) $w++;
+
+            $p = $w * $y + ($x >> 2) + 16;                              /* +16 for the palette*/
+            if(!isset($this->d_out[$p])) $this->d_out[$p] = 0;          /*Clear the bits first*/
+            $this->d_out[$p] |= ($c & 0x3) << (6 - (($x & 0x3) * 2));
+        }
+        else if($this->cf == self::CF_INDEXED_4_BIT) {
+            $w = $this->w >> 1;
+            if($this->w & 0x01) $w++;
+
+            $p = $w * $y + ($x >> 1) + 64;                              /* +64 for the palette*/
+            if(!isset($this->d_out[$p])) $this->d_out[$p] = 0;          /*Clear the bits first*/
+            $this->d_out[$p] |= ($c & 0xF) << (4 - (($x & 0x1) * 4));
+        }
+        else if($this->cf == self::CF_INDEXED_8_BIT) {
+            $p = $this->w * $y + $x + 1024;                              /* +1024 for the palette*/
+            $this->d_out[$p] = $c & 0xFF;
+        }
+       }
+
+    private function dith_reset() {
+        if($this->dith){
+          $this->r_nerr = 0;
+          $this->g_nerr = 0;
+          $this->b_nerr = 0;
+        }
+    }
+
+    private function dith_next($r, $g, $b, $x) {
+
+     if($this->dith){
+        $this->r_act = $r + $this->r_nerr + $this->r_earr[$x+1];
+        $this->r_earr[$x+1] = 0;
+
+        $this->g_act = $g + $this->g_nerr + $this->g_earr[$x+1];
+        $this->g_earr[$x+1] = 0;
+
+        $this->b_act = $b + $this->b_nerr + $this->b_earr[$x+1];
+        $this->b_earr[$x+1] = 0;
+
+        if($this->cf == self::CF_TRUE_COLOR_332) {
+            $this->r_act = $this->classify_pixel($this->r_act, 3);
+            $this->g_act = $this->classify_pixel($this->g_act, 3);
+            $this->b_act = $this->classify_pixel($this->b_act, 2);
+
+            if($this->r_act > 0xE0) $this->r_act = 0xE0;
+            if($this->g_act > 0xE0) $this->g_act = 0xE0;
+            if($this->b_act > 0xC0) $this->b_act = 0xC0;
+
+        } else if($this->cf == self::CF_TRUE_COLOR_565 || $this->cf == self::CF_TRUE_COLOR_565_SWAP) {
+            $this->r_act = $this->classify_pixel($this->r_act, 5);
+            $this->g_act = $this->classify_pixel($this->g_act, 6);
+            $this->b_act = $this->classify_pixel($this->b_act, 5);
+
+            if($this->r_act > 0xF8) $this->r_act = 0xF8;
+            if($this->g_act > 0xFC) $this->g_act = 0xFC;
+            if($this->b_act > 0xF8) $this->b_act = 0xF8;
+
+        } else if($this->cf == self::CF_TRUE_COLOR_888) {
+            $this->r_act = $this->classify_pixel($this->r_act, 8);
+            $this->g_act = $this->classify_pixel($this->g_act, 8);
+            $this->b_act = $this->classify_pixel($this->b_act, 8);
+
+            if($this->r_act > 0xFF) $this->r_act = 0xFF;
+            if($this->g_act > 0xFF) $this->g_act = 0xFF;
+            if($this->b_act > 0xFF) $this->b_act = 0xFF;
+        }
+
+        $this->r_err = $r - $this->r_act;
+        $this->g_err = $g - $this->g_act;
+        $this->b_err = $b - $this->b_act;
+
+        $this->r_nerr = round((7 * $this->r_err) / 16);
+        $this->g_nerr = round((7 * $this->g_err) / 16);
+        $this->b_nerr = round((7 * $this->b_err) / 16);
+
+        $this->r_earr[$x] += round((3 * $this->r_err) / 16);
+        $this->g_earr[$x] += round((3 * $this->g_err) / 16);
+        $this->b_earr[$x] += round((3 * $this->b_err) / 16);
+
+        $this->r_earr[$x+1] += round((5 * $this->r_err) / 16);
+        $this->g_earr[$x+1] += round((5 * $this->g_err) / 16);
+        $this->b_earr[$x+1] += round((5 * $this->b_err) / 16);
+
+        $this->r_earr[$x+2] += round($this->r_err / 16);
+        $this->g_earr[$x+2] += round($this->g_err / 16);
+        $this->b_earr[$x+2] += round($this->b_err / 16);
+      }
+      else{
+        if($this->cf == self::CF_TRUE_COLOR_332) {
+            $this->r_act = $this->classify_pixel($r, 3);
+            $this->g_act = $this->classify_pixel($g, 3);
+            $this->b_act = $this->classify_pixel($b, 2);
+
+            if($this->r_act > 0xE0) $this->r_act = 0xE0;
+            if($this->g_act > 0xE0) $this->g_act = 0xE0;
+            if($this->b_act > 0xC0) $this->b_act = 0xC0;
+
+        } else if($this->cf == self::CF_TRUE_COLOR_565 || $this->cf == self::CF_TRUE_COLOR_565_SWAP) {
+            $this->r_act = $this->classify_pixel($r, 5);
+            $this->g_act = $this->classify_pixel($g, 6);
+            $this->b_act = $this->classify_pixel($b, 5);
+
+            if($this->r_act > 0xF8) $this->r_act = 0xF8;
+            if($this->g_act > 0xFC) $this->g_act = 0xFC;
+            if($this->b_act > 0xF8) $this->b_act = 0xF8;
+
+        } else if($this->cf == self::CF_TRUE_COLOR_888) {
+            $this->r_act = $this->classify_pixel($r, 8);
+            $this->g_act = $this->classify_pixel($g, 8);
+            $this->b_act = $this->classify_pixel($b, 8);
+
+            if($this->r_act > 0xFF) $this->r_act = 0xFF;
+            if($this->g_act > 0xFF) $this->g_act = 0xFF;
+            if($this->b_act > 0xFF) $this->b_act = 0xFF;
+        }
+      }
+    }
+
+    private function classify_pixel($value, $bits){
+      $tmp = 1 << (8 - $bits);
+      $val = round($value / $tmp, 0, PHP_ROUND_HALF_DOWN) * $tmp;
+      if($val < 0) $val = 0;
+      return $val;
+    }
+}
+
+$offline = 0;
+if (!isset($_SERVER["HTTP_HOST"])) {
+  parse_str($argv[1], $_POST);
+  $offline = 1;
+}
+
+
+if($offline == 0){
+  /*The scripts runs ONLINE (likely on littelvgl.com)*/
+  header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
+  header("Cache-Control: post-check=0, pre-check=0", false);
+  header("Pragma: no-cache");
+
+  $img_file = $_FILES["img_file"]["tmp_name"];
+  $img_file_name = $_FILES["img_file"]["name"];
+  $output_name = $_POST["name"];
+  $cf = $_POST["cf"];
+  $format = $_POST["format"];
+  $dith = $_POST["dith"];
+}
+else{
+  /*The scripts runs OFFLINE (likely in command)*/
+  if(isset($_POST["name"])){
+    $output_name = $_POST["name"];
+    echo"Convert:".$output_name;
+  }
+  else{
+    echo("Mising Name\n");
+    exit(0);
+  }
+
+  if(isset($_POST["img"])){
+    $img_file = $_POST["img"];
+    $img_file_name = $_POST["img"];
+       echo "\nimg=".$img_file;
+  }
+  else{
+    echo("Mising image file\n");
+    exit(0);
+  }
+
+  if(isset($_POST["format"])){
+    $format = $_POST["format"];
+  }
+  else{
+    $format = "c_array";
+  }
+
+  if(isset($_POST["dith"])){
+    $dith = $_POST["dith"];
+  }
+  else {
+    $dith = 0;
+  }
+  if(isset($_POST["outdir"]))
+  {
+       $outdir = $_POST["outdir"];
+  }else
+  {
+         $outdir = "./";
+         echo "\noutdir=".$outdir;
+  }
+  if(isset($_POST["cf"])){
+    $cf = $_POST["cf"];
+  }
+  else {
+    $cf = "true_color";
+  }
+}
+
+$conv = new Converter($img_file, $img_file_name,$outdir, $output_name, $dith);
+
+if(!strcmp($format, "c_array")) {
+    if(!strcmp($cf, "true_color") || !strcmp($cf, "true_color_alpha") || !strcmp($cf, "true_color_chroma")) {
+        $alpha = 0;
+        if(!strcmp($cf, "true_color_alpha"))  $alpha = 1;
+
+        $conv->convert($conv::CF_TRUE_COLOR_332, $alpha);
+        $c_332 = $conv->format_to_c_array();
+
+        $conv->convert($conv::CF_TRUE_COLOR_565, $alpha);
+        $c_565 = $conv->format_to_c_array();
+
+        $conv->convert($conv::CF_TRUE_COLOR_565_SWAP, $alpha);
+        $c_565_swap = $conv->format_to_c_array();
+
+        $conv->convert($conv::CF_TRUE_COLOR_888, $alpha);
+        $c_888 = $conv->format_to_c_array();
+
+        $c_res = $c_332 . $c_565 . $c_565_swap . $c_888;
+
+        if(!strcmp($cf, "true_color")) $conv->download_c($conv->out_name, $conv::CF_TRUE_COLOR, $c_res);
+        if(!strcmp($cf, "true_color_alpha")) $conv->download_c($conv->out_name, $conv::CF_TRUE_COLOR_ALPHA, $c_res);
+        if(!strcmp($cf, "true_color_chroma")) $conv->download_c($conv->out_name, $conv::CF_TRUE_COLOR_CHROMA, $c_res);
+    }
+    else if(!strcmp($cf, "alpha_1")) {
+         $conv->convert($conv::CF_ALPHA_1_BIT, 1);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "alpha_2")) {
+         $conv->convert($conv::CF_ALPHA_2_BIT, 1);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "alpha_4")) {
+         $conv->convert($conv::CF_ALPHA_4_BIT, 1);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "alpha_8")) {
+         $conv->convert($conv::CF_ALPHA_8_BIT, 1);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_1")) {
+         $conv->convert($conv::CF_INDEXED_1_BIT);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_2")) {
+         $conv->convert($conv::CF_INDEXED_2_BIT);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_4")) {
+         $conv->convert($conv::CF_INDEXED_4_BIT);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_8")) {
+         $conv->convert($conv::CF_INDEXED_8_BIT);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "raw")) {
+         $conv->convert($conv::CF_RAW);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "raw_alpha")) {
+         $conv->convert($conv::CF_RAW_ALPHA, 1);
+         $conv->download_c($conv->out_name);
+    }
+    else if(!strcmp($cf, "raw_chroma")) {
+         $conv->convert($conv::CF_RAW_CHROMA);
+         $conv->download_c($conv->out_name);
+    }
+}
+/*Binary download*/
+else  {
+    if(!strcmp($cf, "true_color") || !strcmp($cf, "true_color_alpha") || !strcmp($cf, "true_color_chroma")) {
+        $alpha = 0;
+        if(!strcmp($cf, "true_color_alpha")) $alpha = 1;
+
+        if (!strcmp($format, "bin_332"))            $conv->convert($conv::CF_TRUE_COLOR_332, $alpha);
+        else if (!strcmp($format, "bin_565"))       $conv->convert($conv::CF_TRUE_COLOR_565, $alpha);
+        else if (!strcmp($format, "bin_565_swap"))  $conv->convert($conv::CF_TRUE_COLOR_565_SWAP, $alpha);
+        else if (!strcmp($format, "bin_888"))       $conv->convert($conv::CF_TRUE_COLOR_888, $alpha);
+        else {
+         echo("Unknown output file format: $format");
+         exit(1);
+        }
+        if(!strcmp($cf, "true_color"))          $conv->download_bin($conv->out_name, $conv::CF_TRUE_COLOR);
+        if(!strcmp($cf, "true_color_alpha"))    $conv->download_bin($conv->out_name, $conv::CF_TRUE_COLOR_ALPHA);
+        if(!strcmp($cf, "true_color_chroma"))   $conv->download_bin($conv->out_name, $conv::CF_TRUE_COLOR_CHROMA);
+    }
+    else if(!strcmp($cf, "alpha_1")) {
+         $conv->convert($conv::CF_ALPHA_1_BIT, 1);
+         $conv->download_bin($conv->out_name);
+    }
+    else if(!strcmp($cf, "alpha_2")) {
+         $conv->convert($conv::CF_ALPHA_2_BIT, 1);
+         $conv->download_bin($conv->out_name);
+    }
+    else if(!strcmp($cf, "alpha_4")) {
+         $conv->convert($conv::CF_ALPHA_4_BIT, 1);
+         $conv->download_bin($conv->out_name);
+    }
+    else if(!strcmp($cf, "alpha_8")) {
+         $conv->convert($conv::CF_ALPHA_8_BIT, 1);
+         $conv->download_bin($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_1")) {
+         $conv->convert($conv::CF_INDEXED_1_BIT);
+         $conv->download_bin($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_2")) {
+         $conv->convert($conv::CF_INDEXED_2_BIT);
+         $conv->download_bin($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_4")) {
+         $conv->convert($conv::CF_INDEXED_4_BIT);
+         $conv->download_bin($conv->out_name);
+    }
+    else if(!strcmp($cf, "indexed_8")) {
+         $conv->convert($conv::CF_INDEXED_8_BIT);
+         $conv->download_bin($conv->out_name);
+    }
+}
+
+
+
+
+/*
+$c_array .= "#include <stdint.h>
+            #include \"lv_conf.h\"
+            #include \"lvgl/lv_draw/lv_draw.h\""; */
+
+
+//download("test", $c_565);
+
+?>
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/lvgl_image_convert.exe b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/lvgl_image_convert.exe
new file mode 100644 (file)
index 0000000..c6bf1ff
Binary files /dev/null and "b/1.doc/ui\346\267\273\345\212\240\350\257\264\346\230\216/Lvgl_image_convert_tool-master/lvgl_image_convert.exe" differ
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php.exe b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php.exe
new file mode 100644 (file)
index 0000000..5d263d5
Binary files /dev/null and "b/1.doc/ui\346\267\273\345\212\240\350\257\264\346\230\216/Lvgl_image_convert_tool-master/php.exe" differ
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php.ini b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php.ini
new file mode 100644 (file)
index 0000000..2df050d
--- /dev/null
@@ -0,0 +1,4 @@
+extension_dir = ".\"
+extension=php_fileinfo.dll
+extension=php_gd2.dll
+memory_limit = 512M
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php7.dll b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php7.dll
new file mode 100644 (file)
index 0000000..b0fa900
Binary files /dev/null and "b/1.doc/ui\346\267\273\345\212\240\350\257\264\346\230\216/Lvgl_image_convert_tool-master/php7.dll" differ
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php_fileinfo.dll b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php_fileinfo.dll
new file mode 100644 (file)
index 0000000..6011d8e
Binary files /dev/null and "b/1.doc/ui\346\267\273\345\212\240\350\257\264\346\230\216/Lvgl_image_convert_tool-master/php_fileinfo.dll" differ
diff --git a/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php_gd2.dll b/1.doc/ui添加说明/Lvgl_image_convert_tool-master/php_gd2.dll
new file mode 100644 (file)
index 0000000..1bb2d28
Binary files /dev/null and "b/1.doc/ui\346\267\273\345\212\240\350\257\264\346\230\216/Lvgl_image_convert_tool-master/php_gd2.dll" differ
diff --git a/1.doc/智能手表-网易云音乐交付.mg b/1.doc/智能手表-网易云音乐交付.mg
new file mode 100644 (file)
index 0000000..d8b413a
Binary files /dev/null and "b/1.doc/\346\231\272\350\203\275\346\211\213\350\241\250-\347\275\221\346\230\223\344\272\221\351\237\263\344\271\220\344\272\244\344\273\230.mg" differ
diff --git a/1.doc/阿里云穿戴蓝牙GATT规范_0531.pdf b/1.doc/阿里云穿戴蓝牙GATT规范_0531.pdf
new file mode 100644 (file)
index 0000000..78da495
Binary files /dev/null and "b/1.doc/\351\230\277\351\207\214\344\272\221\347\251\277\346\210\264\350\223\235\347\211\231GATT\350\247\204\350\214\203_0531.pdf" differ