android rgb,Android中RGB_565方式压缩图片详解

Android压缩图片的方式

质量压缩

采样率压缩

缩放压缩

色彩压缩

RGB_565简介

RGB_565是色彩压缩的一种方式,其通过不用透明率以及对RGB的相应位数进行省略。

一个彩色图像由R G B三个分量组成,一个RGB565的每一个像素点数据为2Byte,即16位,那么从名字上就可看出来这16位中,高5位为R分量,中间6位为G分量,低5位为B分量

68df1f450c50

image.png

相应的还有一些色彩存储方式:

ALPHA_8 代表8位Alpha位图

ARGB_4444 代表16位ARGB位图

ARGB_8888 代表32位ARGB位图

RGB_565 代表16位RGB位图

RGB_565在Android中的使用

BitmapFactory.Options options2 = new BitmapFactory.Options();

options2.inPreferredConfig = Bitmap.Config.RGB_565;

bm = BitmapFactory.decodeFile(Environment

.getExternalStorageDirectory().getAbsolutePath()

+ "/DCIM/Camera/test.jpg", options2);

RGB_888转换成RGB_565

前者是24位,后者是16位,所以后者的占用内存大小是前者的2/3, 其转换原理如下:

24ibt RGB888 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0

16bit RGB656 R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2 B7 B6 B5 B4 B3

转换的代码如下:

unsigned short RGB888ToRGB565(unsigned int n888Color)

{

unsigned short n565Color = 0;

// 获取RGB单色,并截取高位的5位6位5位作为RGB_565的值

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;

}

RGB_565转换成RGB_888

转换原理:即为RGB_888的地位补零

16bit RGB565 -> 24bit RGB888 的转换

16bit RGB656 R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0

24ibt RGB888 R4 R3 R2 R1 R0 0 0 0 G5 G4 G3 G2 G1 G0 0 0 B4 B3 B2 B1 B0 0 0 0

24ibt RGB888 R4 R3 R2 R1 R0 R2 R1 R0 G5 G4 G3 G2 G1 G0 G1 G0 B4 B3 B2 B1 B0 B2 B1 B0

转换的代码:

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值