转:http://www.xuebuyuan.com/935987.html

背景:在我们的计算机中图像是以RGB888格式显示图像的,24位图每个像素保存了32bit的数据,即RGB888+Alpha,Alpha就是半透明填充字节……但是对于真彩的图像而言,肉眼在16bit的时候已经难以分辨了,因此,有些时候,可以讲RGB888转换为RGB565来存储,减少了存储器的容量的同时,降低了数据量;在后端显示的时候,再次把RGB565转换为RGB888,实现数据宽度的匹配!!

 题记: 总的思想就是,低位增加或者移除。

一.RGB888->RGB565

方法只要提取相应单色高位即可(R5 G6 B5),但会导致低位的缺失,影响精度,而且无法恢复。

二.RGB565->RGB888

方法只要补充相应单色低位即可(R3 G2 B3)。

RGB888用unsigned int 32位字节存储
  0   0   0   0   0   0   0   0 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0
RGB565用unsigned short 16位字节存储
R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2 B7 B6 B5 B4 B3

代码:

#define RGB888_RED      0x00ff0000
#define RGB888_GREEN    0x0000ff00
#define RGB888_BLUE     0x000000ff#define RGB565_RED      0xf800
#define RGB565_GREEN    0x07e0
#define RGB565_BLUE     0x001funsigned short RGB888ToRGB565(unsigned int n888Color)
{unsigned short n565Color = 0;// 获取RGB单色,并截取高位unsigned char cRed   = (n888Color & RGB888_RED)   >> 19;unsigned char cGreen = (n888Color & RGB888_GREEN) >> 10;unsigned char cBlue  = (n888Color & RGB888_BLUE)  >> 3;// 连接n565Color = (cRed << 11) + (cGreen << 5) + (cBlue << 0);return n565Color;
}unsigned int RGB565ToRGB888(unsigned short n565Color)
{unsigned int n888Color = 0;// 获取RGB单色,并填充低位unsigned char cRed   = (n565Color & RGB565_RED)    >> 8;unsigned char cGreen = (n565Color & RGB565_GREEN)  >> 3;unsigned char cBlue  = (n565Color & RGB565_BLUE)   << 3;// 连接n888Color = (cRed << 16) + (cGreen << 8) + (cBlue << 0);return n888Color;
}

转: RGB565、RGB888互相转换原理和代码相关推荐

  1. 音频之声道、采样位宽、采样率转换原理及其代码实现

    一.采样率 具体可以参考资料 :百度百科 例如:16000Hz 表示1s中在连续信号中采集16000次,每一次叫做一个采样点. 二.采样位宽(位数) 具体可以参考资料:百度百科 例如:16bit 表示 ...

  2. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  3. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  4. Pytorch|YOWO原理及代码详解(二)

    Pytorch|YOWO原理及代码详解(二) 本博客上接,Pytorch|YOWO原理及代码详解(一),阅前可看. 1.正式训练 if opt.evaluate:logging('evaluating ...

  5. Base64 编码原理及代码实现

    Base64 编码原理及代码实现 所谓 base64 编码就是从 ASCII 码表中选取64个可打印字符(A-Za-z0-9+/)作为基本字符集对其它字符进行编码转换.加上作为填充的 "=& ...

  6. GAN综述及其在图像生成领域的应用(含原理、代码详解)

    本文将持续更新. 目录 1. 基本GAN 1.1 GAN(2014) 1.2 CGAN(2015) 1.3 DCGAN(2015) 1.4 VAE-GAN(2016) 1.5 ACGAN(2017) ...

  7. Epoll 反应堆模型核心原理及代码讲解

    Epoll 反应堆模型核心原理及代码讲解 [Ⅰ] Epoll 原理及应用 && ET模式与LT模式 [Ⅱ] Epoll 反应堆模型核心原理及代码讲解 一.反应堆核心原理 二.反应堆模型 ...

  8. Yolov1-pytorch版 论文、原理及代码实现

    Yolov1-pytorch版 论文.原理及代码实现 Yolov1 论文.原理.代码实现 1.论文 2.原理 2.1 目标检测方法 2.2 相关名词解释 2.3 网络结构设计分析 2.4 损失函数 3 ...

  9. 【手撕算法】【NLP】【Embedding】word2vec原理,代码实现

    文章目录 1.前言 2.简介 3.原理 3.1.什么是Word Embedding(词嵌入)? 3.2.什么是word2vec? 3.3.逐步解释word2vec 之 CBOW 模型 3.4.逐步解释 ...

最新文章

  1. 【Microsoft Word】编辑文字后,图片位置混乱的解决方法
  2. 关于linux文件挂载(一)
  3. php管理用户名和密码,管理员用户名/密码不适用于PHP
  4. Java ObjectInputStream readShort()方法(带示例)
  5. Java并发编程-线程池底层工作原理
  6. android handler1--消息队列概念
  7. python函数和模块有什么关键特性_【Python函数与模块】(2)函数的特点
  8. nginx重写与重定向区别_nginx学习十一 rewrite url重写以及重定向
  9. handlerexceptionresolver ajax,Http请求的异常处理(草稿) (SEUG)
  10. 商务英语还是计算机专业好,是读广东外语外贸大学计算机专业好还是广东工业大学计算机专业好...
  11. ORA-01017 错误
  12. Unity 粒子特效(Particle System)大小自适应和层级的一些问题
  13. 如何简单抓取拼多多买家订单列表
  14. 软件测试预演环境,什么是软件测试用例预演 有何优点?-软件水平考试-考试吧...
  15. 黑客专用文本编辑器Emacs中文手册
  16. 高版本Ubuntu(如22.02)修改apt源,快速安装低版本gcc/g++
  17. SpringBoot+Vue实现前后端分离的餐饮点餐系统
  18. 线性插值改变图像尺寸_数码相机的成像原理、显示屏尺寸、像素的介绍
  19. MySQL系统流程图怎么画_Word流程图怎么画?如何轻松绘制流程图
  20. windows 向 iPad导入文件

热门文章

  1. 漂亮的css网站js资源无限下载
  2. win10 切换用户、注销、睡眠等
  3. java中的tomcatserverlet
  4. Win10 升级安装全攻略
  5. 聚焦企业征信商业化,可信百科为何以“百科”为名?
  6. Prevent Your Acne With Your Diet
  7. 研究了一下WMF图片格式,应该是CYMK
  8. 深度学习之数据集标注
  9. Franka Emika Panda连接真实机械臂(一)
  10. docker创建busybox