wallpaper.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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. showCrop: false,
  32. width: 250,//宽度
  33. height: 250,//高度
  34. _imageBuffer: null,
  35. }, footerTap() {
  36. const that = this;
  37. wx.chooseMedia({
  38. count: 1,
  39. mediaType: ['image'],
  40. sourceType: ['album'],
  41. // camera: 'back',
  42. success(res) {
  43. console.log(res.tempFiles[0].tempFilePath)
  44. console.log(res.tempFiles[0].size)
  45. that.setData({
  46. imageSrc: res.tempFiles[0].tempFilePath, // 图片路径
  47. showCrop: true
  48. })
  49. }
  50. })
  51. },
  52. async convertToRGB565(inputPath, outputPath) {
  53. try {
  54. // todo
  55. let sharp = null
  56. const metadata = await sharp(inputPath).metadata();
  57. const { width, height } = metadata;
  58. const buffer = await sharp(inputPath)
  59. .raw()
  60. .toBuffer();
  61. const outputBuffer = Buffer.alloc(width * height * 2); // 2 bytes per pixel for RGB565
  62. for (let y = 0; y < height; y++) {
  63. for (let x = 0; x < width; x++) {
  64. const index = (y * width + x) * 4; // RGBA
  65. const r = buffer[index];
  66. const g = buffer[index + 1];
  67. const b = buffer[index + 2];
  68. const r5 = (r >> 3) & 0x1F; // 5 bits for red
  69. const g6 = (g >> 2) & 0x3F; // 6 bits for green
  70. const b5 = (b >> 3) & 0x1F; // 5 bits for blue
  71. const rgb565 = (r5 << 11) | (g6 << 5) | b5;
  72. const outputIndex = (y * width + x) * 2;
  73. outputBuffer[outputIndex] = (rgb565 >> 8) & 0xFF; // High byte
  74. outputBuffer[outputIndex + 1] = rgb565 & 0xFF; // Low byte
  75. }
  76. }
  77. _this.data._imageBuffer = outputBuffer;
  78. _this.startImage()
  79. // fs.writeFileSync(outputPath, outputBuffer);
  80. console.log(`Conversion successful: ${outputPath}`);
  81. } catch (error) {
  82. console.error('Error converting image:', error);
  83. }
  84. },
  85. imageTap(e) {
  86. // console.log(e)
  87. // wxfile://tmp_d3e57489ead39c698676ff860df9cb8a37f66ee1a4777dbb.jpg
  88. let image = e.currentTarget.dataset.image;
  89. _this.setData({
  90. topImg: image ?? {}
  91. })
  92. }, wallpaperList() {
  93. let _this = this;
  94. deviceWallPaper().then(res => {
  95. console.log("壁纸列表", res);
  96. let data = res.data ?? []
  97. if (data.length == 0) {
  98. _this.setData({
  99. imageList: [],
  100. topImg: {},
  101. })
  102. return;
  103. }
  104. topImg = data[0];
  105. _this.setData({
  106. imageList: data ?? [],
  107. topImg: data[0] ?? {}
  108. })
  109. })
  110. },
  111. hideCut(e) {
  112. const img = arguments[0].detail
  113. if (img && img.path) {
  114. console.log("裁剪图片:", img)
  115. }
  116. this.setData({
  117. imageSrc: "",//要裁剪的图片
  118. showCrop: false
  119. })
  120. },
  121. startImage() {
  122. BtHelper.sendData(BtCmd.wallPaper(1));
  123. },
  124. sendImage(imageBuffer) {
  125. let chunkSize = 20;
  126. for (let i = 0; i < imageBuffer.length; i += chunkSize) {
  127. const chunk = imageBuffer.slice(i, i + chunkSize);
  128. // this.sendImage(chunk);
  129. BtHelper.wallPaperData(chunk)
  130. }
  131. },
  132. endImage() {
  133. BtHelper.sendData(BtCmd.wallPaper(0));
  134. },
  135. /**
  136. * 生命周期函数--监听页面加载
  137. */
  138. onLoad(options) {
  139. let param = JSON.parse(options.param)
  140. console.log(param)
  141. this.wallpaperList();
  142. let _this = this;
  143. EventManager.addNotification(CmdEvent.eventName, function (event) {
  144. let name = event.cmdEvent;
  145. console.log("壁纸页:", event)
  146. switch (name) {
  147. case EnumCmdEvent.wallPaper:
  148. let otaCmd = event.wallPaper;
  149. let kind = event.kind;
  150. if (otaCmd === 1 && kind == 1) {
  151. // 开始发送
  152. _this.sendOtaData()
  153. } else if (otaCmd === 0 && kind == 1) {
  154. // 发送结束
  155. _this.endEnd()
  156. }
  157. break;
  158. }
  159. }, this)
  160. },
  161. /**
  162. * 生命周期函数--监听页面初次渲染完成
  163. */
  164. onReady() {
  165. },
  166. /**
  167. * 生命周期函数--监听页面显示
  168. */
  169. onShow() {
  170. },
  171. /**
  172. * 生命周期函数--监听页面隐藏
  173. */
  174. onHide() {
  175. },
  176. /**
  177. * 生命周期函数--监听页面卸载
  178. */
  179. onUnload() {
  180. EventManager.removeNotification(CmdEvent.eventName, this);
  181. },
  182. /**
  183. * 页面相关事件处理函数--监听用户下拉动作
  184. */
  185. onPullDownRefresh() {
  186. },
  187. /**
  188. * 页面上拉触底事件的处理函数
  189. */
  190. onReachBottom() {
  191. },
  192. /**
  193. * 用户点击右上角分享
  194. */
  195. onShareAppMessage() {
  196. }
  197. })