RGB转NV21格式
NV21 格式属于 YUV420SP 类型,是安卓中有的模式,它的存储顺序是先存 Y 分量,再 VU 交替存储。存储大小=height * width * 3 / 2。
注意, 对于图片宽、高为奇数时,需要进行处理,否则会在byte[] yuv时发生越界。如果将byte[] yuv的初始化采用byte [] yuv = new byte[height * width + 2 * (int) Math.ceil(height / 2.0) * (int) Math.ceil(width / 2.0)],保存出的YUV格式图片不正确。 因此,采用了将奇数的宽、高,进行减一变成偶数。
读取本地图片生成Bitmap
FileInputStream fis = new FileInputStream("/sdcard/test/test.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(fis);
RGB转NV21
int width = bitmap.getWidth();
int height = bitmap.getHeight();
if(width % 2 != 0){
width -= 1;
}
if(height % 2 != 0){
height -= 1;
}
byte[] imgData = getNV21(width, height, bitmap);
public static byte[] getNV21(int inputWidth, int inputHeight, Bitmap srcBitmap) {
int[] argb = new int[inputWidth * inputHeight];
if (null !=