微信小程序RGB888转RGB565并得到16进制数据

news/2025/3/18 2:28:14/

参考文章1

一、图像格式简介

计算机中图像基本是以 RGB888 格式显示的,特别是在我们常用的电脑计中,24 位图每个像素保存了 32bit 的数据,即 RGB888+Alpha,Alpha 即半透明填充字节。对于真彩的图像而言,肉眼在16bit 的时候已经难以分辨了,很多时候时候我们可以将 RGB888 转换为 RGB565 来存储,减少了存储器的容量的同时,降低了数据量。在显示的时候,我们再把 RGB565 转换为 RGB888,实现数据宽度的匹配。RGB888 总共使用24 位(三个字节)二进制数值表示,但是需要占用 四个字节存储空间,RGB565 总共使用 16 位(二个字节)二进制数值表示,刚好占用二个字节存储空间。

二、什么是RGB565

在这里插入图片描述

在这里插入图片描述

三、主要实现代码

		initImgData565(imgUrl) {return new Promise((resolve, reject) => {let that = this;uni.createSelectorQuery().select('#canvasImg').fields({node: true,size: true}).exec((res) => {console.log("canvas", res);const canvas = res[0].node;const ctx = canvas.getContext('2d');// var dpr = wx.getSystemInfoSync().pixelRatio // 设备像素比var dpr = 1;canvas.width = res[0].width * dprcanvas.height = res[0].height * dpr// ctx.scale(dpr, dpr)let sideWLen = 135;let sideHLen = 240;ctx.fillRect(0, 0, sideWLen, sideHLen);const img = canvas.createImage();img.src = "/static/images/0.jpeg";img.onload = () => {ctx.drawImage(img, 0, 0, sideWLen, sideHLen);var myImageData = ctx.getImageData(0, 0, sideWLen, sideHLen);console.log("imageData", myImageData)var imageData = myImageData.data;const rgb565ImageData = ctx.createImageData(sideWLen, sideHLen);var rgbStr = "";var rgb = 0;var rgb565 = '';//竖向扫描// for (var i = 0; i < sideWLen; i++) {// 	for (var j = 0; j < sideHLen; j++) {// 		const index = ((j * (myImageData.width * 4)) + (i * 4));// 		const r = myImageData.data[index];// 		const g = myImageData.data[index + 1];// 		const b = myImageData.data[index + 2];// 		const a = myImageData.data[index + 3];// 		let rr = r >> 3;// 		let gg = g >> 2;// 		let bb = b >> 3;// 		let tempByte = `${rr.toString(2).padStart(5,0)}${gg.toString(2).padStart(6,0)}${bb.toString(2).padStart(5,0)}`;// 		let byte1 = tempByte.substring(0, 8);// 		let byte2 = tempByte.substring(8, 16);// 		rgb565 += (parseInt(byte2, 2).toString(16).padStart(2, 0)+parseInt(byte1, 2).toString(16).padStart(2, 0) )// 	}// }//横向扫描for (var j = 0; j < sideHLen; j++) {for (var i = 0; i < sideWLen; i++) {const index = ((j * (myImageData.width * 4)) + (i * 4));const r = myImageData.data[index];const g = myImageData.data[index + 1];const b = myImageData.data[index + 2];const a = myImageData.data[index + 3];let rr = r >> 3;//右移3位,舍弃三个低位let gg = g >> 2;//右移2位,舍弃二个低位let bb = b >> 3;//右移3位,舍弃三个低位let tempByte = `${rr.toString(2).padStart(5,0)}${gg.toString(2).padStart(6,0)}${bb.toString(2).padStart(5,0)}`;//补位 5 6 5let byte1 = tempByte.substring(0, 8); //分割字节let byte2 = tempByte.substring(8, 16);rgb565 += (parseInt(byte2, 2).toString(16).padStart(2, 0)+parseInt(byte1, 2).toString(16).padStart(2, 0));//2进制再转化为16进制,调整低位再前,高位再后}}console.log("rgb565===", rgb565.toUpperCase()) //得到RGB565 16进制数据}//img.src = imgUrl;})})},

http://www.ppmy.cn/news/542132.html

相关文章

android的rgb转bitmap,Android: 格式为RGB_565的bitmap问题

一般我们写代码的时候,创建的bitmap格式都为ARGB_8888, 包含alpha通道,并且可以获得最好的图片质量。但是有些时候,我们还是会需要使用到格式为RGB_565的bitmap, 以减少需要处理的数据量。 那么创建格式为RGB_565的bitmap有什么问题呢,先看下面一段代码: #include #inclu…

java rgb565_java将图片(jpg/bmp/png)转16位bmp(RBG565)

我们无需将图片(如bmp)的像素信息提取出来后进行左移右移操作,直接使用BufferedImage的构造方法来进行转换即可。步骤如下: BufferedImage获取源图片的数据(支持jpg/png/bmp等常见格式) 新建int[]用来保存图片的颜色信息; 用PixelGrabber读取像素信息; MemoryImageSource缓…

开发板实战篇4 RGB565 LCD刷颜色数据

总结: 模块例化思想: 例化1个定时器模块 LCD驱动 锁相环 根据自己思路编写代码,调试仿真代码,同时熟悉环境.加深细节理解 刚开始写得很乱&#xff0c;代码完全就是用modelsim仿真调试出来的 虽然项目开发过MCU的多种GUI&#xff0c;但通过编写verilog代码驱动LCD&#x…

java 转换成565_android yuv怎么转换成RGB565?

网上找了一个方法&#xff0c;但是要怎么用了。staticvoidcvt_420p_to_rgb565(intwidth,intheight,constunsignedchar*src,unsignedshort*dst){intline,col,linewidth;inty,u,v,yy,vr,ug,vg,ub;i... 网上找了一个方法&#xff0c;但是要怎么用了。 static void cvt_420p_to_rgb…

java rgb8888转rgb565_Swift RGB888转RGB565

位图(Bitmap)&#xff0c;又称栅格图(英语&#xff1a;Raster graphics)或点阵图&#xff0c;是使用像素阵列(Pixel-array/Dot-matrix点阵)来表示的图像。 根据位深度,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多&#xff0c;可用的颜色就越多&#…

java rgb565转rgb888_RGB565 与 RGB888的相互转换 | 学步园

本文内容不是完全原创&#xff0c;参考了网上部分精华&#xff0c;做了整理。 RGB色彩模式(也翻译为“红绿蓝”&#xff0c;比较少用)是工业界的一种颜色标准&#xff0c;是通过对红(R)、绿(G)、蓝(B) 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的&#xf…

java rgb565转rgb888_RGB565 与 RGB888的相互转换

RGB565 与 RGB888的相互转换 2018-12-07 本文内容不是完全原创&#xff0c;参考了网上部分精华&#xff0c;做了整理。 RGB色彩模式(也翻译为“红绿蓝”&#xff0c;比较少用)是工业界的一种颜色标准&#xff0c;是通过对红(R)、绿(G)、蓝(B) 三个颜色通道的变化以及它们相互之…

python rgb565_读取RGB565格式的图像

前言:笔者准备参加校内的一个循线小车大赛,会用到摄像头,特写此文章以误导队友(逃) 之前准备用ov7725摄像头,这款摄像头据了解只能输出格式为RGB565的图片,作为从来没有接触过底层的小白,根本不知道这种格式的图片是什么东西,很懵。 后来在师兄的帮助下,加上在网上了解…