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

这篇具有很好参考价值的文章主要介绍了解决小程序-wx.canvasGetImageData()-RGB取色盘苹果手机获取颜色慢问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

         简介

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

解决小程序-wx.canvasGetImageData()-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
          }
}

希望能够帮助大家,不要再掉进这个坑里。文章来源地址https://www.toymoban.com/news/detail-484038.html

到了这里,关于解决小程序-wx.canvasGetImageData()-RGB取色盘苹果手机获取颜色慢问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案

    半年前做的个小程序,更新了二个文字,重新上传审核通过,悲剧了,新用户的昵称全部变为微信用户,头像全部变为默认头像,查了半天代码没找到原因,相当头大,搜了一下文档,尴尬了,11月9号新更新的规则,不再返回昵称和头像值....需要用头像昵称获取能力去触发获

    2024年02月11日
    浏览(40)
  • 小程序地理位置接口wx.getLocation申请审核解决方法(详细说明及避坑)

    本人申请了三次才最终通过,简单说一下坑 前几天想实现定位功能改了一天代码手机上也不行。 晚上登上小程序管理界面才发现那个功能要申请。。。那就申请呗 申请路径 :小程序页面-开发-开发管理-接口设置-地理位置 之后就提交申请,两次都不过就不理解了。特地去问

    2024年01月16日
    浏览(56)
  • 解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题

    微信小程序使用 手机号快速验证组件 在获取用户手机号的时候,经常会因为提交参数的code和iv、encryptedData参数匹配不一致而报错。其根本原因在官方有相应的解释: 注意使用旧版本组件时 ,需先调用wx.login接口。所以在用户点了拒绝之后授权之后,需要重新获取调用wx.lo

    2024年02月11日
    浏览(49)
  • 微信小程序toast组件(解决wx.showToast文本最多显示两行问题)

    创建toast组件  index.wxmi index.less index.json index.ts toast.js 使用 index.json index.wxml  index.ts  效果

    2024年02月12日
    浏览(88)
  • 解决小程序wx.getUserProfile接口回收,wxfile://tmp临时文件转base64传回后台

    可以弄一个个人信息,让用户设置自己的头像跟昵称 设置一个按钮让用户点击后可以直接获取到用户的头像,或者选择图片库上的图片去上传。  注意:buttom上需要添加上open-type=\\\"chooseAvatar\\\"字段 @chooseavatar=\\\"onChooseAvatar\\\"事件  通过按钮获取出来的url地址在开发者工具上的是h

    2024年02月12日
    浏览(44)
  • 微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)

    项目需要使用开放标签,按照各种博文上的各种解决方案都不显示, 我都服了,搞来搞去都没用。 最后我搞下来问题我都服了!!!!! 我下载的jweixin-1.6.0.js 不是 正确的 , 对你没看错,这个jssdk应该是我从某个项目里复制出来的 所以遇到不显示的问题没办法解决就需要

    2024年02月13日
    浏览(44)
  • H5跳回小程序的wx.miniProgram.navigateTo不起效果,无法跳转页面,已解决

     需求:H5中的点击首页按钮跳回小程序的首页,就写了以下代码    结果并没有跳转成功,但是alert成功,于是查找资料,换了各种api比如switchTab,redirectTo都不行,找了好多博主的帖子发现都不行,问题肯定出在url上面,于是改成下面这样,就可以成功跳转了,不得不说啊

    2024年02月11日
    浏览(49)
  • 微信小程序报错qqmap-wx-jssdk.js‘ is not defined解决方法

     今天做了一个需求,需要接入腾讯地图,报错qqmap-wx-jssdk.js\\\' is not defined报了一下午,我苦苦找不到原因,太自信了,因为另外一个地方的腾讯地图引入很轻松,我也是按照官网给的方法写的,怎么都引入不进去,网上的方法都尝试了一遍都不行。刚刚解决了,先说报错原因

    2024年02月04日
    浏览(58)
  • 微信小程序报错“qqmap-wx-jssdk.js‘ is not defined”解决方法

    一、问题描述 在使用微信小程序开发过程中,有时会遇到“qqmap-wx-jssdk.js‘ is not defined”的报错信息。这个错误通常与腾讯地图SDK相关,表明小程序试图引用一个未定义的脚本。 二、解决方案 解决此问题的方法有多种,以下是一些常见的解决方案: 检查引用顺序:确保在使

    2024年04月15日
    浏览(49)
  • 【已解决】微信小程序-苹果手机日期解析异常

    在开发微信小程序时,使用了 uView 的 CountDown倒计时 组件和 uni.$u.timeFrom Api,后台传递了一个时间字符串,前台计算时间戳的差值,来显示还有多久开始,这个功能在模拟器和我自己手机(iphon13)上都是正常的,在提交测试之后,测试反馈(iphone12)日期显示异常,先后经历

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包