目前大多数图像和视频是采用每个像素8bit的方式存储,恰好是一个字节的长度。随着图像和视频向超高清方向发展,8bit已经不能满足对画质和色彩的需求。已经出现了每个像素用10bit、12bit、14bit的应用,由于它们无法用1个字节表示,如果使用2个字节又会浪费空间,所有需要将每个像素拆分表示。
一般将每像素10bit的RGB和YUV图像分别表示为PRGB10和PYUV10,每像素12bit的RGB和YUV图像分别表示为PRGB12和PYUV12,每像素10bit的RGB和YUV图像分别表示为PRGB14和PYUV14。下面分别介绍其在内存中的存储方式。
PRGB10和PYUV10
对于10bit的图像,要将连续的4个像素(按从左到右从上到下的顺序)用5个字节表示。图像的像素数需要是4的整数倍。
其在内存中的存储方式如图:
第1个像素:低8位为第1个字节,高2位在第2个字节的低2位。
第2个像素:低6位为第2个字节高6位,高4位在第3个字节的低4位。
第3个像素:低4位为第3个字节高4位,高6位在第4个字节的低6位。
第4个像素:低2位为第4个字节高2位,高8位在第5个字节。
从内存中读出像素的方式如上式所示。
PRGB12和PYUV12
对于12bit的图像,要将连续的2个像素(按从左到右从上到下的顺序)用3个字节表示。图像的像素数需要是2的整数倍。
其在内存中的存储方式如图:
第1个像素:低8位为第1个字节,高4位在第2个字节的低4位。
第2个像素:低4位为第2个字节高4位,高8位在第3个字节。
从内存中读出像素的方式如下式:
PRGB14和PYUV14
对于14bit的图像,要将连续的4个像素(按从左到右从上到下的顺序)用7个字节表示。图像的像素数需要是4的整数倍。
其在内存中的存储方式如图:
第1个像素:低8位为第1个字节,高6位在第2个字节的低6位。
第2个像素:低2位为第2个字节高2位,第3-10位在第3字节,高4位在第4个字节的低4位。
第3个像素:低4位为第4个字节高4位,第3-10位在第5字节,高2位在第6个字节的低2位。
第4个像素:低6位为第6个字节高6位,高8位在第7个字节。
从内存中读出像素的方式如下式:
以上便是10bit、12bit、14bit图像在内存中的存储格式和读取方法。
感兴趣的可以关注微信公众号Video Coding