wallpaper.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. // pages/piano/wallpaper/wallpaper.js
  2. const { deviceWallPaper } = require('../../../request/deviceListRequest')
  3. // const sharp = require('sharp');
  4. // const fs = require('fs');
  5. const {
  6. BtHelper
  7. } = require('../../../devices/bt_helper');
  8. const { BtCmd } = require('../../../devices/bluetooth/bt_cmd');
  9. import EventManager from '../../../utils/event_bus'
  10. import { EnumCmdEvent, CmdEvent } from '../../../devices/cmd_key_event';
  11. // import EventManager from '../../utils/event_bus'
  12. Page({
  13. /**
  14. * 页面的初始数据
  15. */
  16. data: {
  17. topImg:
  18. {
  19. // pic: "",
  20. // id: "",
  21. // name: ""
  22. },
  23. imageList: [
  24. ],
  25. selectIndex: 0,
  26. nvabarData: {
  27. showCapsule: 1, //是否显示左上角图标 1表示显示 0表示不显示
  28. title: '壁纸设置', //导航栏 中间的标题
  29. },
  30. src: '',
  31. width: 250,//宽度
  32. height: 250,//高度
  33. _imageBuffer: null,
  34. }, footerTap() {
  35. const that = this;
  36. wx.chooseImage({
  37. count: 1, // 最多可以选择的图片张数
  38. sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  39. sourceType: ['album'], // 从相册选择
  40. success: function (res) {
  41. const tempFilePaths = res.tempFilePaths;
  42. // console.log('获取图片信息成功', res);
  43. // wx.cropImage({
  44. // src: tempFilePaths[0], // 图片路径
  45. // cropScale: '1:1', // 裁剪比例
  46. // success: (res) => {
  47. // console.log('裁剪成功', res);
  48. // that.setData({
  49. // src: res.tempFilePath
  50. // })
  51. // }
  52. // })
  53. wx.getImageInfo({
  54. src: tempFilePaths[0],
  55. success: function (imageInfo) {
  56. console.log('获取图片信息成功', imageInfo);
  57. //获取到image-cropper实例
  58. //开始裁剪
  59. that.setData({
  60. src: imageInfo.path,//要裁剪的图片
  61. })
  62. },
  63. fail: function (err) {
  64. console.error('获取图片信息失败', err);
  65. }
  66. });
  67. },
  68. fail: function (err) {
  69. console.error('选择图片失败', err);
  70. }
  71. });
  72. },
  73. async convertToRGB565(inputPath, outputPath) {
  74. try {
  75. // todo
  76. let sharp = null
  77. const metadata = await sharp(inputPath).metadata();
  78. const { width, height } = metadata;
  79. const buffer = await sharp(inputPath)
  80. .raw()
  81. .toBuffer();
  82. const outputBuffer = Buffer.alloc(width * height * 2); // 2 bytes per pixel for RGB565
  83. for (let y = 0; y < height; y++) {
  84. for (let x = 0; x < width; x++) {
  85. const index = (y * width + x) * 4; // RGBA
  86. const r = buffer[index];
  87. const g = buffer[index + 1];
  88. const b = buffer[index + 2];
  89. const r5 = (r >> 3) & 0x1F; // 5 bits for red
  90. const g6 = (g >> 2) & 0x3F; // 6 bits for green
  91. const b5 = (b >> 3) & 0x1F; // 5 bits for blue
  92. const rgb565 = (r5 << 11) | (g6 << 5) | b5;
  93. const outputIndex = (y * width + x) * 2;
  94. outputBuffer[outputIndex] = (rgb565 >> 8) & 0xFF; // High byte
  95. outputBuffer[outputIndex + 1] = rgb565 & 0xFF; // Low byte
  96. }
  97. }
  98. _this.data._imageBuffer = outputBuffer;
  99. _this.startImage()
  100. // fs.writeFileSync(outputPath, outputBuffer);
  101. console.log(`Conversion successful: ${outputPath}`);
  102. } catch (error) {
  103. console.error('Error converting image:', error);
  104. }
  105. },
  106. imageTap(e) {
  107. // console.log(e)
  108. // wxfile://tmp_d3e57489ead39c698676ff860df9cb8a37f66ee1a4777dbb.jpg
  109. let image = e.currentTarget.dataset.image;
  110. _this.setData({
  111. topImg: image ?? {}
  112. })
  113. }, wallpaperList() {
  114. let _this = this;
  115. deviceWallPaper().then(res => {
  116. console.log("壁纸列表", res);
  117. let data = res.data ?? []
  118. if (data.length == 0) {
  119. _this.setData({
  120. imageList: [],
  121. topImg: {},
  122. })
  123. return;
  124. }
  125. topImg = data[0];
  126. _this.setData({
  127. imageList: data ?? [],
  128. topImg: data[0] ?? {}
  129. })
  130. })
  131. },
  132. startImage() {
  133. BtHelper.sendData(BtCmd.wallPaper(1));
  134. },
  135. sendImage(imageBuffer) {
  136. let chunkSize = 20;
  137. for (let i = 0; i < imageBuffer.length; i += chunkSize) {
  138. const chunk = imageBuffer.slice(i, i + chunkSize);
  139. // this.sendImage(chunk);
  140. BtHelper.wallPaperData(chunk)
  141. }
  142. },
  143. endImage() {
  144. BtHelper.sendData(BtCmd.wallPaper(0));
  145. },
  146. /**
  147. * 生命周期函数--监听页面加载
  148. */
  149. onLoad(options) {
  150. let param = JSON.parse(options.param)
  151. console.log(param)
  152. this.wallpaperList();
  153. let _this = this;
  154. EventManager.addNotification(CmdEvent.eventName, function (event) {
  155. let name = event.cmdEvent;
  156. console.log("壁纸页:", event)
  157. switch (name) {
  158. case EnumCmdEvent.wallPaper:
  159. let otaCmd = event.wallPaper;
  160. let kind = event.kind;
  161. if (otaCmd === 1 && kind == 1) {
  162. // 开始发送
  163. _this.sendOtaData()
  164. } else if (otaCmd === 0 && kind == 1) {
  165. // 发送结束
  166. _this.endEnd()
  167. }
  168. break;
  169. }
  170. }, this)
  171. },
  172. /**
  173. * 生命周期函数--监听页面初次渲染完成
  174. */
  175. onReady() {
  176. },
  177. /**
  178. * 生命周期函数--监听页面显示
  179. */
  180. onShow() {
  181. },
  182. /**
  183. * 生命周期函数--监听页面隐藏
  184. */
  185. onHide() {
  186. },
  187. /**
  188. * 生命周期函数--监听页面卸载
  189. */
  190. onUnload() {
  191. EventManager.removeNotification(CmdEvent.eventName, this);
  192. },
  193. /**
  194. * 页面相关事件处理函数--监听用户下拉动作
  195. */
  196. onPullDownRefresh() {
  197. },
  198. /**
  199. * 页面上拉触底事件的处理函数
  200. */
  201. onReachBottom() {
  202. },
  203. /**
  204. * 用户点击右上角分享
  205. */
  206. onShareAppMessage() {
  207. }
  208. })