图解RGB565、RGB555、RGB16、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
数据格式主要有二种:RGB565
和RGB555
。
- 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
图解RGB565、RGB555、RGB16、RGB24、RGB32、ARGB32等格式的区别相关推荐
- RGB565颜色表,附RGB888转RGB565工具,RGB24转RGB565工具
下载链接 http://download.csdn.net/detail/liquanfeng9227/9893117 工具可以将RGB888颜色值转换成TFT屏用的RGB565颜色值. #def ...
- 图解BIO、NIO、AIO、多路复用IO的区别
作者:扛麻袋的少年 blog.csdn.net/lzb348110175/article/details/98941378 学习之前,我们先来了解一下IO模型: ①同步阻塞IO(Blocking IO ...
- 图解事件坐标screenX、clientX、pageX, offsetX的区别
一.图解 如图所示,假设页面中灰色圆点是鼠标点击处,黄色区域是鼠标触发事件对象 二.概念 1.screenX 和screenY 参照点:电脑屏幕左上角 screenX:鼠标点击位置相对于电脑屏幕左上角 ...
- js图解之-图解静态、私有、公有属性和方法的区别
js图解之-图解静态方法.私有方法.公有方法区别 首先,在方法之前,我们需要先铺垫一下我们的基础知识,从一砖一瓦开始,最终解决我们的问题 一.什么是面向对象 面向对象是一个伟大的编程思想, 本质:创建 ...
- 图解Js event对象offsetX, clientX, pageX, screenX, layerX, x区别
通过 3 张图和 1 张表格,轻松区别 Javascript Event 对象中的offsetX, clientX, pageX, screenX, layerX, x等属性. 一.测试代码如下: & ...
- 图解Public,protected ,private和什么也不填的区别
欢迎转载!
- UML图解简单工厂模式工厂方法模式抽象工厂模式区别
简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一: 工厂模式包含 简单工厂模式& 工厂方法模式& 抽象工厂模式这三种: 这三者主要区别在于工厂实现的 ...
- ARGB_8888(ARGB32)色彩格式
这种格式就简单的多,一幅大小为width*height色彩格式为ARGB_8888的图片,假设大小是640*480的(以像素为单位),全部数据都存放在一个 int ARGB[] 的数组中,则数组的大小 ...
- android全平台基于ffmpeg解码本地MP4视频推流到RTMP服务器
音视频实践学习 android全平台编译ffmpeg以及x264与fdk-aac实践 ubuntu下使用nginx和nginx-rtmp-module配置直播推流服务器 android全平台编译ffm ...
- Android平台移植FFmpeg和x264
音视频实践学习 android全平台编译ffmpeg以及x264与fdk-aac实践 ubuntu下使用nginx和nginx-rtmp-module配置直播推流服务器 android全平台编译ffm ...
最新文章
- Elasticsearch对垒8大竞品技术,孰优孰劣?
- 【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )
- apache2和jk和tomcat安装笔记-ubuntu
- UVA1603Square Destroyer破坏正方形
- linux7 无法连接网络,CentOS7无法连接网络怎么办
- 代码与html混合,自定义的标签与html的标签混合应用_css
- 公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!
- 继刺甲蜂之后的飞鸽传书
- 经典面试题(35):以下代码将输出的结果是什么?
- 使用TortoiseGit提交代码到Github.com上 详细步骤
- mysql5.7 非gtid同步
- Linux系统基础入门
- jvm虚拟机规范官方文档入口
- windows自带日文输入法突然显示假名与敲击的按键不一致
- 下属被阿里挖角的那个早晨,我开始想念周鸿祎!
- 微信小程序详解wx:if elif else的用法(搭配view、block)
- 没有什么是学不会的,关键是你敢不敢豁出去——《向着光亮那方》读后感
- Top Rock Bands
- push推送相关注意事项
- KFS邮件自动告警-数据比对-数据修复配置方法