图解RGB565、RGB555、RGB16、RGB24、RGB32、ARGB32等格式的区别

news/2025/3/17 21:00:22/

音视频实践学习

  • android全平台编译ffmpeg以及x264与fdk-aac实践
  • ubuntu下使用nginx和nginx-rtmp-module配置直播推流服务器
  • android全平台编译ffmpeg合并为单个库实践
  • android-studio使用cmake编译ffmpeg实践
  • android全平台编译ffmpeg视频解码器实践
  • android全平台编译ffmpeg支持命令行实践
  • android全平台编译ffmpeg视频推流实践
  • android平台下音频编码之编译LAME库转码PCM为MP3
  • 图解YU12、I420、YV12、NV12、NV21、YUV420P、YUV420SP、YUV422P、YUV444P的区别
  • ubuntu平台下编译vlc-android视频播放器实践
  • 图解RGB565、RGB555、RGB16、RGB24、RGB32、ARGB32等格式的区别

概述

RGB色彩模式是工业界的一种颜色标准,是通过对红、绿、蓝三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

RGB16格式

RGB16数据格式主要有二种:RGB565RGB555

  • RGB565

每个像素用16比特位表示,占2个字节,RGB分量分别使用5位、6位、5位。

//获取高字节的5个bit
R = color & 0xF800;
//获取中间6个bit
G = color & 0x07E0;
//获取低字节5个bit
B = color & 0x001F;
  • RGB555

每个像素用16比特位表示,占2个字节,RGB分量都使用5位(最高位不用)。

//获取高字节的5个bit
R = color & 0x7C00;
//获取中间5个bit
G = color & 0x03E0;
//获取低字节5个bit
B = color & 0x001F;

RGB24格式

RGB24图像每个像素用24比特位表示,占3个字节,注意:在内存中RGB各分量的排列顺序为:BGR BGR BGR ......

RGB32格式

RGB32图像每个像素用32比特位表示,占4个字节R,G,B分量分别用8个bit表示,存储顺序为B,G,R,最后8个字节保留。注意:在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA ......

  • ARGB32

本质就是带alpha通道RGB24,与RGB32的区别在与,保留的8个bit用来表示透明,也就是alpha的值。

在内存中的分量排列顺序如下:

R = color & 0x0000FF00;
G = color & 0x00FF0000;
B = color & 0xFF000000;
A = color & 0x000000FF;

android平台下的RGB格式

我们平时在android平台下处理Bitmap的时候,下面的几个参数应该接触的比较多:

  • Bitmap.Config.ALPHA_8

每个像素用8比特位表示,占1个字节,只有透明度,没有颜色。

  • Bitmap.Config.RGB_565

每个像素用16比特位表示,占2个字节,RGB分量分别使用5位、6位、5位,上面的图已经有作说明。

  • Bitmap.Config.ARGB_4444

每个像素用16比特位表示,占2个字节,由4个4位组成,ARGB分量都是4位。

  • Bitmap.Config.ARGB_8888

每个像素用32比特位表示,占4个字节,由4个8位组成,ARGB分量都是8位。

注意:java默认使用大端字节序,c/c++默认使用小端字节序android平台下Bitmap.config.ARGB_8888的Bitmap默认是大端字节序,当需要把这个图片内存数据给小端语言使用的时候,就需要把大端字节序转换为小端字节序。例如:java层ARGB_8888传递给jni层使用时,需要把java层的ARGB_8888的内存数据转换为BGRA8888

分离RGB24像素数据中的R、G、B分量

先准备一张色彩图:

使用ffmpeg命令将其转换成rgb格式

ffmpeg -i 375x375.jpeg -s 375x375 -pix_fmt rgb24 rgb24.rgb
void split_rgb24(char *inputPath, int width, int height) {FILE *fp_rgb = fopen(inputPath, "rb+");FILE *fp_r = fopen("output_r", "wb+");FILE *fp_g = fopen("output_g", "wb+");FILE *fp_b = fopen("output_b", "wb+");unsigned char *data = (unsigned char *) malloc(width * height * 3);fread(data, 1, width * height * 3, fp_rgb);int index = 0;for (index = 0; index < width * height * 3; index = index + 3) {//Rfwrite(data + index, 1, 1, fp_r);//Gfwrite(data + index + 1, 1, 1, fp_g);//Bfwrite(data + index + 2, 1, 1, fp_b);}cout << index << endl;free(data);fclose(fp_rgb);fclose(fp_r);fclose(fp_g);fclose(fp_b);
}
int main() {split_rgb24("/home/byhook/media/rgb24.rgb", 375, 375);return 0;
}

最终我们可以通过雷神提供的工具,来查看分离的R,G,B三个分量的文件

  • R分量图像

  • G分量图像

  • B分量图像

参考:
https://baike.baidu.com/item/RGB
https://blog.csdn.net/leixiaohua1020/article/details/50534150
https://en.wikipedia.org/wiki/RGBA_color_space


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

相关文章

16位Alpha颜色混合(565)

手机上的一些小图标&#xff0c;当按下这些图标时&#xff0c;颜色会发生改变&#xff0c;实现的方式是怎么样的&#xff1f;先看一篇网络上流传的文章&#xff1a; //----------------------------------------------------------------------------------------------------…

Codeforces Round #565 (Div. 3)

div3题目一般都是思维题&#xff0c;算法比较少&#xff0c;用来训练思维和解题速度很合适 A题 模拟即可 #include <iostream> using namespace std; typedef long long ll; int main(){int q;ll n;cin >> q;while(q--){cin >> n;int ans 0;while(n ! 1)…

CH565 DVP sensor选型、性能评估

-----------------------转载注明出处 在使用CH565芯片的DVP接口的时候&#xff0c;涉及到摄像头选型的时候还是有一些困惑的&#xff0c;主要就是具体某个分辨率帧率能不能传输。 首先DVP接口是一个并行接口&#xff0c;存在4线、8线、12线的可配置传输宽度。同时96MHz的时钟…

5.2.2如何改变文件属性与权限

常用于群组、拥有者、各种身份的权限之修改的指令&#xff0c;如下所示&#xff1a; 改变一个文件的群组很简单&#xff0c;直接chgrp来改变&#xff0c;指令就是change group。要被改变的群组名称必须要在/etc/group文件内存在才行&#xff0c;否则就会显示错误。 假设你已经…

工地扬尘智能监测系统 yolov7

工地扬尘智能监测系统通过yolov7网络算法模型技术&#xff0c;实时监测工地施工中的扬尘情况。工地扬尘智能监测系统利用AI视频智能分析技术&#xff0c;并将数据传输到数据中心进行分析。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研究团队希望它能够同时支…

【T+】安装畅捷通T+提示安装向导找不到环境检测工具,是否手动选择环境检测工具文件夹。

【问题描述】 在windows server 2008r2系统环境下&#xff0c; 安装畅捷通T专属云标准版18.0软件的时候&#xff0c;提示&#xff1a; 安装向导找不到环境检测工具&#xff0c;是否手动选择环境检测工具文件夹&#xff08;CheckEnvironment&#xff09; 点击【是】手动选择&…

基于STM32的矩阵电子密码锁的Proteus仿真

本设计仅供参考 基于STM32的矩阵电子密码锁的Proteus仿真 (源码仿真原理图PCB) 原理图&#xff1a;Altium Designer 仿真图&#xff1a;protues 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 编号C0034 【腾讯文档】C0034 网盘链接 资料下载链接 主要功能&…

串行通信的电子密码锁设计全套资料

word完整版可点击如下下载>>>>>>>> 串行通信的电子密码锁设计全套资料.rar-硬件开发文档类资源-CSDN下载https://download.csdn.net/download/u013253075/78686275?spm1001.2014.3001.5503 目 录 1 引 言....................................…