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

2023-11-19

音视频实践学习

概述

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) {
        //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分量图像

  • G分量图像

  • B分量图像

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图解RGB565、RGB555、RGB16、RGB24、RGB32、ARGB32等格式的区别 的相关文章

  • 从ndk中的不同线程调用java方法

    我正在尝试使用 android 的 NDK 从 C 中的独立线程调用 java 静态方法 到目前为止我已经 JNIEnv env AttachJava jclass cls2 env gt FindClass com actvt showd
  • Context.startForegroundService 然后没有调用Service.startForeground

    这是我的 BroadcastReciever 类 该类处理启动电话状态 Code public class BroadCastRecieverBoot extends BroadcastReceiver Override public vo
  • 如何设计Android建筑物室内地图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想设计一个 Android 应用程序 它可以帮助学生和其他人在特定建筑物 一层 中导航 显示前往教室的步行方向 我需要帮助 这是您通
  • Android Volley:意外响应代码 405

    我的 Android Volley JsonObjectRequest 遇到 onErrorResponse 并出现以下问题 BasicNetwork performRequest Unexpected response code 405
  • Android 模拟器在 Windows 7 64 位上崩溃

    我是一名 Android 开发新手 到目前为止只在我的 Android 手机上运行了 Hello World 当我尝试在模拟器模式下运行我的应用程序时 我看到带有键盘和接听 挂断按钮的模拟器窗口 但在我的应用程序运行之前我收到一个窗口对话框
  • 使用 ViewPager 从 Activity 到 Fragment 的通信

    我有一个 Activity 和两个 Fragmentstablayout含有一个viewpager 现在我可以通过实现谷歌的指南回调接口从片段到活动进行通信 但我怎样才能以另一种方式沟通从活动到片段 如果活动中发生了一些事情 外部事件 我想
  • Google Play 商店中的 Android 应用程序与 LG G3(密度 538,尺寸 2560x1440)不兼容?

    Android 应用程序与具有高分辨率和密度的 LG G3 设备不兼容 我已经在清单中测试了以下配置 支持屏幕和兼容屏幕都不起作用
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • Gradle 构建过程失败

    我的项目正在成功构建 突然我在 Android studio 中收到以下错误 无法找到方法 org gradle api publish maven internal publication MavenPublicationInternal
  • Android 中的处理程序到处理程序与 Messenger 到 Messenger 通信

    问题 使用起来是否 更好 更快且开销更少 Handler http developer android com reference android os Handler html与使用 Handler 通信相比信使 http develop
  • 移动到SD卡

    我知道从 android 2 2 开始可以使用移动到 SD 卡功能 我想知道有没有办法在我的程序中检测设备是否支持移动到 SD 卡功能 如果支持 则可以移动 否则如果不支持 则什么也不会发生 将在手机内存中 我的主要问题是我的应用程序支持
  • 无法读取第 0 行,第 -1 列

    我正在尝试复制使用 SQLite 管理器创建的数据库 我在其中执行了以下操作 CREATE TABLE android metadata locale TEXT DEFAULT en US and INSERT INTO android m
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 地理围栏不可用以及如何处理

    我正在 Android 上使用地理围栏 它在大多数手机上都工作正常 但在其中一些上 它不起作用 在我的错误日志中显示 地理围栏不可用 某些用户没有为 Google Play 服务启用位置跟踪 我认为这就是地理围栏在他们的手机上不起作用的原因
  • 布局聊天气泡问题:TextView 占满整个屏幕

    我正在研究泡泡聊天 我使用具有两种布局的适配器 一种用于传入消息 另一种用于我的消息 适配器工作正常 我的问题在于传入布局 无法很好地显示传入时间文本 当消息文本增长时 会填满屏幕的整个宽度 并隐藏消息时间的文本 第一个问题 如何才能实现这
  • Google 的 Android OpenGL 教程是否教授了错误的线性代数?

    在帮助另一位用户解决有关该问题的问题后响应触摸事件 http developer android com training graphics opengl touch htmlAndroid教程 我下载了源代码 并且对我所看到的感到非常困惑
  • 什么是版本代码主要?和versionCode有什么区别?

    我刚刚发现PackageInfo versionCode https developer android com reference android content pm PackageInfo html versionCode在 Andr
  • 谷歌地图URL中参数的含义是什么

    我正在 Android 上使用 Webkit 浏览器 我想在以下 URL 中获得一个红色 A 符号
  • 使用 Android O 的“android:fontFamily”时出现错误“文件名必须以 .xml 结尾”?

    Android O 引入了一项新功能 XML 中的字体 它允许您将字体用作资源 我正在创建font资源文件中的文件夹 由安卓开发者 https developer android com preview features working w
  • Android:通过查找带有标签而不是 ID 的容器来添加片段

    我正在使用 for 循环创建片段的多个实例 在每个片段中 我需要添加另一组子片段 为此 我需要找到正确的容器 如果我使用容器的 ID 所有子片段都会添加到第一个父片段 而不是它们自己的父片段 在我的主要片段中 for ParentFragm

随机推荐

  • C语言基础入门48篇_40_结构体指针(结构体指针定义与基本数据结构指针类似,使用*、指针用->引用成员,变量用.引用成员、当使用结构体时建议用结构体指针作为参数)

    1 结构体指针的定义 结构体指针的定义与基本数据结构的指针类似 使用 符号即可 include
  • java 图形用户界面

    目录 Swing与AWT概述 Swing概述 组件显示 框架与窗体 创建框架对象 框架Frame类结构 框架对象的创建及常用方法 创建Swing窗体对象 Swing窗体JFrame 类结构 Swing 窗体对象的创建 窗体对象常用属性 常用
  • 数据结构——计算节点个数和二叉树高度(C语言版)

    摘自 数据结构 计算节点个数和二叉树高度 C语言版 作者 正弦定理 发布时间 2020 12 12 23 27 09 网址 https blog csdn net chinesekobe article details 111086664
  • 【期末复习】软件工程

    结构化分析 数据流图 er图 状态转换图 数据字典 结构化设计 流程图 盒图 pad图 IPO图 判定表 判定树 软件结构图 面向对象分析 用例图 活动图 包图 类图 顺序图 协作图 状态图 面向对象设计 三层架构 构件图 部署图 软件生存
  • eclipse查看jar包源码(反编译)

    国际惯例 百度翻帖 法一 jar包右键 gt 打开方式 gt 但是 我失败了 没有任何反应 猜测可能是没有安装相关软件 下面就是软件的安装 法二 利用JD DUI查看源码 需要安装JD GUI 地址 https www softpedia
  • SAM 模型真的是强悍到可以“分割一切”了吗?

    关注公众号 发现CV技术之美 上周 Meta AI发布了 Segment Anything Model SAM 第一个图像分割基础模型 很多计算机视觉从业者惊呼 这下CV真的不存在了 快跑 但是SAM 模型真的是强悍到可以 分割一切 了吗
  • c++基础十三(二维数组)

    二维数组 1 定义 2 初始化 3 赋值和输出 4 二维数组名 理解 二维数组是一维数组的一种延伸 假如将一维数组比喻成一条由点构成的线 而二维就是由点构成的面 1 定义 数据类型 数组名 行数 列数 例 int arr 2 4 表示 1
  • bcnf分解算法_BCNF的保持无损连接的分解

    BCNF 的分解是数据库范式的内容 分解的算法是这样的 将关系模式R分解为一个BCNF的基本步骤是 1 检查R中关系模式是否符合BCNF 若都符合输出即可 2 若R中有关系模式S不符合BCNF 则必有X gt A的闭包不包含S的全部属性 把
  • 挑战IT达人35岁身体健康和工作效率焦虑(中年危机):生理年龄并非决定因素,行为习惯才是关键!

    文章目录 引言 1 生理年龄 vs 实际年龄 2 体能下滑的真相 3 新陈代谢变慢与体重增加 4 坐姿引发的健康问题 5 生活方式塑造健康 结论 作者问与答 你现在身体的体能状况如何 你有身体焦虑吗 如何保持规律性运动 你有哪些健康生活的好
  • 【授权mysql某一个用户只读权限以及回滚】

    GRANT SELECT ON FPSSATURN TO dbmonopr02 GRANT SELECT ON 数据库名 TO 用户名 注意 中间有 单引号 你提供的SQL查询是在数据库FPSSATURN中的所有表上授予用户 dbmonop
  • struts property escape 输出 html 标签

    有时 在数据取出一大段文字要输出到页面上 如果有回车符号 在页面会显示不出来 要显示要用到escape参数 escape false
  • Qt边框border概述

    border概述 每个边框有3个方面 样式 或外观 颜色 以及其宽度 粗细 下面我们分别重点解释这三项 边框样式 border style 设置元素所有边框的样式 或者单独地为各边设置边框样式 它有10个属性值 分别是 none 无样式 h
  • 程序员必备:一款知识管理利器+效率工具

    回复 1024 送你一个特别推送 今天给大家推荐一款知识管理利器 其实也是一个不错的效率工具 我自己感觉确实很方便 也不错 所以才推荐给大家的 我比较喜欢这款工具的亮点是 它可以把我们自己记得笔记自动生成思维导图 这款工具是什么呢 它就叫
  • 无监督和有监督算法的区别

    无监督和有监督的理解方法有很多 主要可以从以下几方面来理解 1 无监督与监督学习的区别在于一个无教学值 一个有教学值 但是 个人认为他们的区别在于无监督学习一般是采用聚簇等算法来分类不同样本 而监督学习一般是利用教学值与实际输出值产生的误差
  • 机器学习——贝叶斯网络

    贝叶斯网络 贝叶斯网络 Bayesian Networks 也被称为信念网络 Belif Networks 或者因果网络 Causal Networks 是描述数据变量之间依赖关系的一种图形模式 是一种用来进行推理的模型 贝叶斯网络为人们提
  • JavaScript对象——数学对象

    说到JavaScript对象首先需要说一下内置对象 1 内置对象 内置对象 就是js语言自带的一些对象 这些对象供开发者使用 并提供了一些常用的或是最基本而必要的功能 属性或者方法 内置对象的优点 就是帮助开发者更快的进行开发 2 数学对象
  • 数字信号处理第五次试验:FIR数字滤波器设计与软件实现

    数字信号处理第五次试验 FIR数字滤波器设计与软件实现 前言 一 实验目的 二 实验原理与方法 三 实验环境 四 实验内容及步骤 五 实验结果截图 含分析 六 思考题 前言 为了帮助同学们完成痛苦的实验课程设计 本作者将其作出的实验结果及代
  • win10安装mujoco200,mujoco_py2.0.2.9,gym

    win10安装mujoco200 mujoco py2 0 2 9 gym 最近在学习强化学习 要用到这几个组件和引擎 尝试了很多方法才成功 于是写了两篇win10系统下安装mujoco和gym的总结 本文介绍的是在Win10系统下安装gy
  • 合并两个有序链表

    编程题 合并两个有序链表 保持链表顺序 例如 输入 链表1 1 gt 3 gt 5 gt 7 链表2 2 gt 4 gt 6 gt 8 输出 链表交集 1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 public
  • 图解RGB565、RGB555、RGB16、RGB24、RGB32、ARGB32等格式的区别

    音视频实践学习 android全平台编译ffmpeg以及x264与fdk aac实践 ubuntu下使用nginx和nginx rtmp module配置直播推流服务器 android全平台编译ffmpeg合并为单个库实践 android