|
@@ -3,7 +3,7 @@
|
|
|
const { BtCmd } = require('../../../devices/bluetooth/bt_cmd');
|
|
|
import EventManager from '../../../utils/event_bus'
|
|
|
import { EnumCmdEvent, CmdEvent } from '../../../devices/cmd_key_event';
|
|
|
-import route_util from '../../../utils/route_util';
|
|
|
+import js_md5 from '../../../utils/js_md5';
|
|
|
const { BtHelper } = require('../../../devices/bt_helper');
|
|
|
|
|
|
Page({
|
|
@@ -51,88 +51,7 @@ Page({
|
|
|
})
|
|
|
}
|
|
|
},
|
|
|
- convertImageDataToRGB565(imageData, width, height) {
|
|
|
- // 创建一个 Uint16Array 来存储 RGB565 数据
|
|
|
- const rgb565Data = new Uint16Array(width * height);
|
|
|
-
|
|
|
- // 将 RGBA 数据转换为 RGB565 数据
|
|
|
- for (let i = 0; i < imageData.length; i += 4) {
|
|
|
- const r = imageData[i];
|
|
|
- const g = imageData[i + 1];
|
|
|
- const b = imageData[i + 2];
|
|
|
- // const a = imageData[i + 3]; // 透明度,如果需要可以使用
|
|
|
-
|
|
|
- // 将 RGB 转换为 RGB565
|
|
|
- const rgb565 = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
|
|
|
- rgb565Data[i / 4] = rgb565;
|
|
|
- }
|
|
|
- return rgb565Data
|
|
|
-
|
|
|
- },
|
|
|
-
|
|
|
- generateLVGLBinFile(rgb565Data, width, height) {
|
|
|
- const header = new ArrayBuffer(32);
|
|
|
- const headerView = new DataView(header);
|
|
|
- // 十六进制字符串
|
|
|
- // const hexString = "04 80 07 3c ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff";
|
|
|
- const hexString = "04 80 07 3c";
|
|
|
-
|
|
|
- // 将十六进制字符串转换为字节数组
|
|
|
- const bytes = hexString.split(' ').map(byte => parseInt(byte, 10));
|
|
|
- console.log(bytes);
|
|
|
- // 将字节数组写入 headerView
|
|
|
- bytes.forEach((byte, index) => {
|
|
|
- headerView[index] = byte
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- // 创建文件数据
|
|
|
- const fileData = new Uint8Array(header.byteLength + rgb565Data.byteLength);
|
|
|
- console.log("fileData:", fileData.length, fileData.byteLength);
|
|
|
- fileData.set(new Uint8Array(header), 0); // 添加头部信息
|
|
|
- fileData.set(new Uint8Array(rgb565Data.buffer), header.byteLength); // 添加 RGB565 数据
|
|
|
- return fileData;
|
|
|
- },
|
|
|
- // 转换 RGBA 数据为 RGB565
|
|
|
- imageDataToRGB565(rgbaData, width, height) {
|
|
|
- const pixelCount = width * height;
|
|
|
- // 十六进制字符串
|
|
|
- const hexString = "04 80 07 3c";
|
|
|
|
|
|
- // 将十六进制字符串转换为字节数组
|
|
|
- // const bytes = hexString.split(' ').map(byte => parseInt(byte, 10));
|
|
|
- const bytes = ["04", "80", "07", "3c"];
|
|
|
-
|
|
|
- console.log(bytes);
|
|
|
-
|
|
|
- const outputData = new Uint8Array(pixelCount * 2 + bytes.length); // 文件头 + 每像素 4 字节 (RGB888 + Alpha)
|
|
|
-
|
|
|
- // 将字节数组写入 headerView
|
|
|
- bytes.forEach((byte, index) => {
|
|
|
- outputData[index] = parseInt(byte, 16)
|
|
|
- });
|
|
|
-
|
|
|
- // 写入像素数据
|
|
|
- let offset = bytes.length;
|
|
|
- for (let i = 0; i < pixelCount; i++) {
|
|
|
- const r = rgbaData[i * 4];
|
|
|
- const g = rgbaData[i * 4 + 1];
|
|
|
- const b = rgbaData[i * 4 + 2];
|
|
|
-
|
|
|
- // 转换为 RGB565 格式
|
|
|
- const r5 = (r >> 3) & 0x1F;
|
|
|
- const g6 = (g >> 2) & 0x3F;
|
|
|
- const b5 = (b >> 3) & 0x1F;
|
|
|
- const rgb565 = (r5 << 11) | (g6 << 5) | b5;
|
|
|
-
|
|
|
- // 写入 RGB565 (小端序)
|
|
|
- outputData[offset++] = rgb565 & 0xFF; // 低字节
|
|
|
- outputData[offset++] = (rgb565 >> 8) & 0xFF; // 高字节
|
|
|
- }
|
|
|
-
|
|
|
- console.log('最终偏移:', offset)
|
|
|
- return outputData;
|
|
|
- },
|
|
|
cropperload(e) {
|
|
|
console.log('cropper加载完成');
|
|
|
},
|
|
@@ -201,6 +120,10 @@ Page({
|
|
|
console.log("加载文件成功:", obj.data.byteLength, obj.data.length, obj.getFileInfo)
|
|
|
|
|
|
let binData = obj.data;
|
|
|
+ let myMd5 = _this.getImgMde5(binData)
|
|
|
+ wx.setClipboardData({
|
|
|
+ data: myMd5,
|
|
|
+ })
|
|
|
_this.sliceDataIntoChunks(binData, 128);
|
|
|
|
|
|
console.log("加载文件成功2:", binData.byteLength, binData.length)
|
|
@@ -209,9 +132,9 @@ Page({
|
|
|
wx.showLoading({
|
|
|
title: '开始传输壁纸',
|
|
|
})
|
|
|
- _this.data._imgMD5 = res.digest
|
|
|
+ _this.data._imgMD5 = myMd5
|
|
|
_this.data._imgIndex = 0
|
|
|
- console.log("md5 2:", _this.data._imgMD5)
|
|
|
+ console.log("md5 2:", res.digest)
|
|
|
_this.startImage()
|
|
|
}, fail: (err) => {
|
|
|
console.error('getFileInfo失败:', err);
|
|
@@ -228,44 +151,7 @@ Page({
|
|
|
// _this.downloadAndSaveFile("https://music-play.oss-cn-shenzhen.aliyuncs.com/backOss/file/8770a6097d9940b59032d099b2fdde3b.bin");
|
|
|
|
|
|
},
|
|
|
- // 下载网络文件并保存到本地
|
|
|
- downloadAndSaveFile(url) {
|
|
|
- const fs = wx.getFileSystemManager();
|
|
|
- let _this = this;
|
|
|
- wx.downloadFile({
|
|
|
- url: url, // 网络文件的 URL
|
|
|
- success: (res) => {
|
|
|
- if (res.statusCode === 200) {
|
|
|
- // 下载成功,res.tempFilePath 是临时文件路径
|
|
|
- const tempFilePath = res.tempFilePath;
|
|
|
- console.log("下载文件:", res)
|
|
|
- fs.readFile({
|
|
|
- filePath: tempFilePath,
|
|
|
- // encoding: '', // 不指定编码以获取原始二进制数据
|
|
|
- success: (res) => {
|
|
|
- console.log("下载文件成功:", res.data)
|
|
|
- let rgbData = res.data
|
|
|
- _this.data._imageBufferLength = rgbData.byteLength
|
|
|
|
|
|
- wx.hideLoading();
|
|
|
- wx.showLoading({
|
|
|
- title: '开始传输壁纸',
|
|
|
- })
|
|
|
- _this.startImage(rgbData);
|
|
|
- },
|
|
|
- fail: (err) => {
|
|
|
- console.error('读取 .bin 文件失败:', err);
|
|
|
- },
|
|
|
- });
|
|
|
- } else {
|
|
|
- console.error('下载文件失败:', res.statusCode);
|
|
|
- }
|
|
|
- },
|
|
|
- fail: (err) => {
|
|
|
- console.error('下载文件失败:', err);
|
|
|
- },
|
|
|
- });
|
|
|
- },
|
|
|
checkAndRequestImagePermission: function () {
|
|
|
const _this = this;
|
|
|
|
|
@@ -345,6 +231,14 @@ Page({
|
|
|
// }
|
|
|
this.data._chunks = chunks;
|
|
|
},
|
|
|
+ getImgMde5(buffer) {
|
|
|
+ let md5ctx = js_md5.md5_init();
|
|
|
+ js_md5.md5_update(md5ctx, buffer, buffer.byteLength ?? buffer.length);
|
|
|
+ let result = js_md5.md5_final(md5ctx);
|
|
|
+ let md5 = js_md5.md5_encode_hex(result, 16);
|
|
|
+ console.log("result:", md5);
|
|
|
+ return md5
|
|
|
+ },
|
|
|
sendImageMD5() {
|
|
|
let lengthCode = this.data._chunks.length
|
|
|
console.log("发送壁纸MD5 1:", lengthCode, this.data._imgMD5)
|