首页 > 其他分享 >通过js将RGB888转RGB565

通过js将RGB888转RGB565

时间:2022-11-30 17:24:34浏览次数:64  
标签:字节 舍掉 js toString RGB888 RGB565 255

什么是RGB565

通常我们前端接触的图片,R,G,B三个通道,每个通道占8位,一个字节,用数字表示是0-255。比如我们常写的CSS:rgb(255,255,255),这样一个像素需要3个字节来表示。但是在一些物联网设备上,由于芯片性能,内存等的原因,同时对图像质量的要求不是很高,需要使用更少的字节来表示一个像素,于是有了RGB555,RGB565等数据格式。

RGB565是用两个字节十六位来存储像素点的信息,在RGB565中,R通道占据5位,G通道占据6位,B通道占据5位,示意图如下:

上面我们已经了解了RGB565,那么如何将RGB888转成RGB565呢?

截取法转RGB565

最简单粗暴的方法是舍掉低位的数据,加入一个颜色是:rgb(100, 150, 200),那么转换成RGB565的方式如下:

let r = 100 >> 3;  // 舍掉3个低位
let g = 150 >> 2;  // 舍掉2个低位
let b = 200 >> 3; // 舍掉3个低位
const rgb565 =`${r.toString(2).padStart(5,0)}${g.toString(2).padStart(6,0)}${b.toString(2).padStart(5,0)}` // 0110010010111001

这样我们就得到了一个2字节的RGB565色值,在渲染的时候,再把r,g,b左移对应的位数,得到一个近似的色值,就可以还原成RGB888,下面有一个例子,展示了这种方式:

<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="300" loading="lazy" scrolling="no" src="https://codepen.io/imgss/embed/JjZaEzE?default-tab=html%2Cresult" style="width: 100%" title="Untitled"> See the Pen Untitled by imgss (@imgss) on CodePen. </iframe>
  1. 抖动法转RGB565

除了上面的方法外,还有一种抖动法来转换为RGB565的方式,可以参考这篇文章
https://cloud.tencent.com/developer/article/1547330?from=15425, jimp转换rgb565也是采用这种方式

参考

读取RGB565格式的图像: https://zhuanlan.zhihu.com/p/41216913

标签:字节,舍掉,js,toString,RGB888,RGB565,255
From: https://www.cnblogs.com/imgss/p/16933682.html

相关文章

  • jsp文件分片上传,断点续传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1. 通过form表单向后端发送请求    ......
  • Next.js dynamic router path bug All In One
    Next.jsdynamicrouterpathbugAllInOnemarkdowndaynamicrouterbugwhybelowcodenotworkatall?dynamicrouterpathscreenshot//[title].jsexpor......
  • js检测页面性能指标
    检测获取fp、fcp、lcp、cls性能指标:window.monitor={isWinLoad:false,observer:null,sessionValue:0,sessionEntries:[],data:{fp:0,f......
  • 【Jmeter】21天打卡 09取样器之http不同方法Post提交表单和json
    作业要求:取样器之http不同方法post提交表单和json服务器名:httpbin.orgname api methodbodypost提交参数 postpostpost:123post提交JSON数据 postpost{"po......
  • 转 前端前辈 反压缩 js ,我的万花筒写轮眼开了,CV 能力大幅提升
    转 反压缩js,我的万花筒写轮眼开了,CV能力大幅提升摘要:前言因为比较菜,所以经常需要读一些别人的代码学习学习。有源码的代码当然好,但是很多网站不开源。这些网站的......
  • Angularjs的指令学习笔记
    1.指令ng-app ng-controller<scriptsrc="../js/angular.min.js"></script><body><divng-app="myApp"ng-controller="myCtrl">    {{firstName+""+lastName}......
  • Vue.js的学习笔记
    Vue.js1.简介vue介绍:vue是一个兴起的前端js库,是一个精简的MVVM。从技术角度讲,Vue.js专注于MVVM模型的ViewModel层。它通过双向数据绑定把View层和Model层连接了起......
  • js 手写防抖
    使用场景:多次操作只执行第一次操作。可以用于用户点击按钮事件防抖操作。多次操作只执行最后一次操作。可以搜索输入框,输入多个字符进行搜索,当输入停止之后进行搜索......
  • JVM问题诊断常用命令:jinfo,jmap,jstack
    1.jinfo描述:输出给定 java 进程所有的配置信息。包括 java 系统属性和 jvm用法:jinfo[option]pidjinfo[option]executablecorejinfo[option][server-id@]r......
  • js的所有的this指向和节流防抖
    所有的this指向普通函数重的this指向,wind对象中的方法this指向,该对象(是对象中的方法的this指向,不是对象中的this指向,对象是没有this指向的)事件绑定中的this指向,绑定的事......