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

图解RGB565、RGB555、RGB16、RGB24、RGB32、ARGB32等格式的区别常见的 RGB 格式有 RGB1 RGB4 RGB8 RGB565 RGB555 RGB24 RGB32 ARGB32 等

音视频实践学习

  • 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位。

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

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

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

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

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

RGB24格式

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

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

RGB32格式

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

  • ARGB32

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

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

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

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分量

先准备一张色彩图:

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

使用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) { 
    //R fwrite(data + index, 1, 1, fp_r); //G fwrite(data + index + 1, 1, 1, fp_g); //B fwrite(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分量图像

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

  • G分量图像

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

  • B分量图像

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201932.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:16
下一篇 2026年3月20日 上午8:17


相关推荐

  • jmeter安装教程

    jmeter安装教程基于windows,jmeter4.0版本。1.下载安装包地址:http://jmeter.apache.org/download_jmeter.cgi2.解压,配置环境2.1新增系统变量JMETER_HOME变量值:E:\developer\apache-jmeter-4.0注意,根据自己的路径配置,到这一级就好了。2.2配置classpath在…

    2022年5月3日
    47
  • sqlpro studio激活(JetBrains全家桶)

    (sqlpro studio激活)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~FNWCMR37AF-eyJsaWNlbnNlSWQiOi…

    2022年3月30日
    122
  • 网络协议篇之DHCP协议(一)—— DHCP协议基础

    网络协议篇之DHCP协议(一)—— DHCP协议基础一,动态主机配置协议DHCP1,DHCP简介DHCP(DynamicHostConfigurationProtocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。DHCP的前身是BOOTP协议(BootstrapProtocol),BOOTP

    2022年5月10日
    56
  • IDEA导入Eclipse项目

    IDEA导入Eclipse项目背景 用习惯了 idea 再去用 eclipse 实在用的不习惯 于是将老的 eclipse 项目导入到 eclipse 网上有很多教程 看了很多博客都不行 一直报错 各种报错 现在终于好了 我们一起来看看怎么将 eclipse 的项目导入到 idea1 新建一个文件夹 idea 打开这个空文件夹 2 将项目导入 3 窗口右下角等待项目编译完成 4 配置项目环境和结构注意 上面的

    2026年3月26日
    3
  • 最容易理解的对卷积(convolution)的解释

    最容易理解的对卷积(convolution)的解释啰嗦开场白读本科期间 信号与系统里面经常讲到卷积 convolution 自动控制原理里面也会经常有提到卷积 硕士期间又学了线性系统理论与数字信号处理 里面也是各种大把大把卷积的概念 至于最近大火的深度学习 更有专门的卷积神经网络 Convolutiona CNN 在图像领域取得了非常好的实际效果 已经把传统的图像处理的方法快干趴下了 啰啰嗦嗦说了这么多卷积 惭

    2026年3月26日
    3
  • BatchShell软件—-Xshell与Ansible结合

    BatchShell软件—-Xshell与Ansible结合

    2021年6月3日
    106

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号