解决小程序-wx.canvasGetImageData()-RGB取色盘苹果手机获取颜色慢问题

news2024/11/17 15:33:01

         简介

        最近做了一个微信小程序控制蓝牙设备,通过小程序中的RGB取色盘,获取当前的RGB颜色,通过蓝牙发送给设备,设备接收到RGB以后,做出相应的调整。

 图1:RGB取色盘

        在安卓手机上运行正常,能够迅速的相应我的手部滑动位置,并获取到颜色,非常的跟手,但是当运行在苹果手机上时,就会非常的卡顿,速度异常的慢。延时极高,是无法接受的。

        我排查过了各种情况,然后我发现wx.canvasGetImageData()这个API,它是获取can with就是那个画布指定位置的颜色的,然后在安卓上就是可以很快的获取到,但是在苹果上它也延迟非常高可得,可能需要一秒多才能够获取到这个东西,这个应该是属于它微信API的问题;

        于是,我在微信的开放社区就是提交这个bug了,一致等待官方给我回复,可是一直没有人回复我。想尽了办法也没有解决这个问题,于是我做十年硬件嵌入式C语言开发的暴脾气上来了,既然微信给的 API不好用,那我就自己写一个函数实现相同的功能就行了啊。

        于是乎我就用到了反正切函数arctan()和勾股定理等,一顿计算,自己编辑出来了一个函数,实现了函数通过触摸点的xy坐标计算获取RGB圆盘的颜色的功能,目前在我的项目中试可用的,可以调整的范围也是挺好的,分享给大家,希望能够帮助大家,同时,有谁有更好的办法大家可以一起交流一下!

注释:

x1,x2  :圆心点坐标;

 y1, y2:触摸点位置坐标;

// XY 坐标 转RGB
function xy2rgb(x1, y1, x2, y2) {
	// x1=106;
	// y1=106;
	// x2=86;
	// y2=86;
	var n = x2 - x1,
		s = y1 - y2;
	var angle = parseInt(360 * Math.atan(s / n) / (2 * Math.PI));
	if (angle < 0) {
		angle = 180 + angle;
	}

	var R_angle = 0;
	var B_angle = 0;
	var G_angle = 0;

	if ((n >= 0) & (s > 0)) {
		R_angle = 180 - angle;
		B_angle = 180 - (120 - angle);
		G_angle = Math.abs(180 - (120 + angle));
	}
	if ((n < 0) & (s > 0)) {
		R_angle = 180 - angle;
		B_angle = 180 - Math.abs(120 - angle);
		G_angle = Math.abs(180 - (120 + angle));
	}
	if ((n < 0) & (s <= 0)) {
		R_angle = angle;
		B_angle = 180 - (60 + angle);
		G_angle = 180 - Math.abs(60 - angle);
	}
	if ((n > 0) & (s < 0)) {
		R_angle = angle;
		B_angle = Math.abs(180 - (60 + angle));
		G_angle = 180 - Math.abs(60 - angle);
	}

	// console.log("jiaodu",angle);
	var radial = parseInt(Math.sqrt(n * n + s * s));
	// console.log("zuobiao666888",n,s);
	// console.log("banjing",radial,Math.abs(-22));
	console.log("B_angle",R_angle,B_angle,G_angle,radial);
	if (R_angle < 90) {
        var R_colour = parseInt((R_angle / 180) * (1*(x1 - radial) / x1) * 255);
	} else {
		var R_colour = parseInt((R_angle / 180) * 1*(radial / x1) * 255);
	}
	if (B_angle < 90) {
		var B_colour = parseInt((B_angle / 180) * (1*(x1 - radial) / x1) * 255);
	} else {
		var B_colour = parseInt((B_angle / 180) * 1*(radial / x1) * 255);
	}

	if (G_angle < 90) {
		var G_colour = parseInt((G_angle / 180) * (1*(x1 - radial) / x1) * 255);
	} else {
		var G_colour = parseInt((G_angle / 180) * 1*(radial / x1) * 255);
    }
    if (R_angle > 170) {
        R_colour = 255;
        // B_colour = 0;
        // G_colour = 0;
    }
    if (G_angle > 170) {
        G_colour = 255;
        // R_colour = 0;
        // B_colour = 0;
    }
    if (B_angle > 170) {
        B_colour = 255;
        // R_colour = 0;
        // G_colour = 0;
    }
    if(R_colour >255){
        R_colour = 255
    }
    if(R_colour <0){
        R_colour = 0
    }
    if(B_colour >255){
        B_colour = 255
    }
    if(B_colour <0){
        B_colour = 0
    }
    if(G_colour >255){
        G_colour = 255
    }
    if(G_colour <0){
        G_colour = 0
    }
	// console.log("rgb666",R_colour,B_colour,G_colour);
	const RGB_value = [R_colour,G_colour,B_colour]
	return RGB_value
}

微信小程序中js触摸点坐标获取(这部分比较简单,是常规操作)

if (e.touches) {
          let x = e.changedTouches[0].x;
          let y = e.changedTouches[0].y;
          if (e.type !== 'touchend') {
           x = e.touches[0].x;
           y = e.touches[0].y;
          }
          let ban=(wx.getSystemInfoSync().windowWidth*0.66/2).toFixed(2);
          console.log("let banlet ban 888",ban)
          const res = util.xy2rgb(ban, ban, x, y)
          if (res[0] == 0 && res[1] == 0 && res[2] == 0) {
           return
          }
}

希望能够帮助大家,不要再掉进这个坑里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业实战项目rsync+inotify实现实时同步

目录 一、inotify安装和介绍 1. 安装inotify 2. inotify-tools常用命令 3. rsync inotify 实践 3.1 服务端配置 3.2 客户端配置 一、inotify安装和介绍 1. 安装inotify yum install epel-release -y yum install inotify-tools -y 2. inotify-tools常用命令 inotify-to…

C++ 使用哈希表封装模拟实现unordered_map unordered_set

一、unordered_map unordered_set 和 map set的区别 1. map set底层采取的红黑树的结构&#xff0c;unordered_xxx 底层数据结构是哈希表。unordered_map容器通过key访问单个元素要比map快&#xff0c;但它通常在遍历元素子集的范围迭代方面效率较低。 2. Java中对应的容器名…

vivo和oppo通知权限弹窗

在vivo和oppo部分手机上&#xff0c;首次安装app时&#xff0c;会弹出一个系统级的通知权限弹窗&#xff0c;&#xff08;部分一加手机也会出现&#xff0c;是因为一加手机使用了OPPO的colorOS系统&#xff09;如图。 这个通知权限弹窗比较坑&#xff0c;一来可能不符合产品对…

Word控件Spire.Doc 【文本】教程(21) ;如何在 C# 中用 Word 文档替换文本

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

ARM pwn 入门 (4)

3. callme 本题有多个文件&#xff0c;根据题意来看是需要依次调用callme_one、callme_two、callme_three这3个库函数。这三个函数会进行flag的解密&#xff0c;但是需要满足前三个参数等于特定值。这就需要我们去elf文件中寻找合适的gadget了。 而本题正好给出了一个不能再合…

为什么模板的声明与定义不能分离?

目录 一、模板的好处与注意事项 二、 声明定义为什么不能不放一起&#xff1f; 一、模板的好处与注意事项 模板的好处从下面代码可以体现&#xff1a; template<typename T> void Swap(T& left, T& right) {T temp left;left right;right temp; } int main…

IDEA+MapReduce+Hive综合实践——搜狗日志查询分析

1.下载数据源 打开搜狗实验室链接&#xff1a;搜狗搜索引擎 - 上网从搜狗开始&#xff0c;由于搜狗实验室链接打不开了&#xff0c;所有这里自己制作一份数据进行实验。 SogouQ.txt: 2.上传下载文件至HDFS 2.1将下载的文件通过FinalShell工具上传到Linux系统 2.2SogouQ.txt并…

dev_I_II笔记

dev1 问题 1.model创建不了&#xff1f; 2.从开发界面双击进入后&#xff0c;如何返回&#xff1f; 3.一个客户端界面的所有东西就是一个项目吗&#xff1f;多个项目的数据全部储存在开发界面的aot中&#xff1f; 4.最终的测试是需要完成一个什么东西&#xff1f; 1.学习…

企业微信自定义客户画像

OpenAPI基本介绍 微伴助手开放接口对接文档 version: 0.4 注1&#xff1a;微伴助手开放接口已经开放公测&#xff0c;进入微伴后台-应用管理-API接入以获取企业标识&#xff08;corp_id&#xff09; &#xff0c;企业API调用凭据&#xff08;secret&#xff09; 注2&#xff…

视图相关知识的汇总

重点大纲 描述视图创建&#xff0c;改变视图的定义&#xff0c;删除视图通过视图重新找回数据通过视图插入&#xff0c;更新和删除数据创建和使用inline视图执行Top-N 分析什么是视图&#xff1f; 视图是基于一张表或者另一张视图的逻辑表。 视图本身不包含数据。视图被存储在…

[数据结构]什么是树?什么是二叉树?

作者&#xff1a; 华丞臧. 专栏&#xff1a;【数据结构】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 文章目录一、树1.1 树的概念及结构1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用二…

JavaEE——Http请求和响应,https的加密

请求 报头 里面是一系列键值对&#xff0c;有的是标准定义的&#xff0c;有的是自定义的 典型的有以下几个 Host 代表服务器的主机地址和端口 也就是当我们访问浏览器时&#xff0c;可以知道从哪里获取数据 端口号如果省略就代表是默认值&#xff0c;http是80&#xff0c;h…

c++好用的网站

目录 洛谷www.luogu.com.cn 有道小图灵https://oj.youdao.com/csp 维基https://oi-wiki.org/ 1&#xff0c;洛谷 他的网址是www.luogu.com.cn。 这是一个好用的刷题网站&#xff0c;题库里有大约有2000多道题。 洛谷有题里有csp往年的题。 题库&#xff1a; 有题&#x…

怎么把PDF调方向保存?这几个方法值得收藏

小伙伴们在工作的时候&#xff0c;有时候领导会发PDF文件要你查阅重要内容&#xff0c;但不是每次收到的PDF文件都是无损的&#xff0c;有时候打开后发现里面内容杂乱并且页面方向不一致&#xff0c;这个时候有些小伙伴不知道怎么办&#xff0c;那么我们应该怎么把PDF调方向保存…

基于正交投影的实时三维人体姿态估计

王亦洲课题组 ECCV 2022 入选论文解读&#xff1a;基于正交投影的实时三维人体姿态估计 本文是对发表于计算机视觉领域顶级会议 ECCV 2022的论文 Faster VoxelPose: Real-time 3D Human Pose Estimation by Orthographic Projection 的解读。该论文由北京大学王亦洲课题组与微软…

Beam Failure Detection

微信同步更新欢迎关注同名modem协议笔记 正如上篇所述NR中所有的上下行信道的发送和接收都是基于波束。基站通过对信道质量的测量来动态选择UE和基站之间波束的方向和频率&#xff0c;进而完成通信。NR中无线链路检测可以分为两种&#xff0c;一种是4G中常见的radio link mon…

《Linux》day5--ssh——ssh登录与scp传文件

文章目录ssh登录基本用法配置文件密钥登录执行命令scp传文件基本用法使用scp配置其他服务器的vim和tmuxssh登录 基本用法 远程登录服务器。 ssh userhostname其中&#xff1a; user&#xff1a;是用户名hostname&#xff1a;是IP地址或域名 第一次登录会提示&#xff1a; …

城市道路积水识别监测系统

城市道路积水识别监测系统基于机器视觉分析&#xff0c;燧机城市道路积水识别监测系统实时识别街道路面积水情况&#xff0c;对严重积水时立即报警。城市道路积水识别监测系统对低洼区域进行实时监测&#xff0c;一旦城市道路积水识别监测系统监测到街道路面积水时&#xff0c;…

【附源码】Python计算机毕业设计宿舍管理系统设计

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【雨夜】一次nacos 导致的 CPU 飙高问题

今天下午突然 出现 测试环境 cpu飙高&#xff0c;干到了 60%&#xff0c;其他项目 响应时间明显变长。。。有点吓人&#xff0c;不想背锅 项目背景 出问题的项目是 需要连接各个不同nacos 和不同的 namespace 进行对应操作的 一个项目&#xff0c;对nacos的操作都是httpClien…