Converting YUV->RGB(Image processing)->YUV during onPreviewFrame in android?

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

I am capturing image using SurfaceView and getting Yuv Raw preview data in public void onPreviewFrame4(byte[] data, Camera camera)

I have to perform some image preprocessing in onPreviewFrame so i need to convert Yuv preview data to RGB data than image preprocessing and back to Yuv data.

I have used both function for encoding and decoding Yuv data to RGB as following :

public void onPreviewFrame(byte[] data, Camera camera) {     Point cameraResolution = configManager.getCameraResolution();     if (data != null) {         Log.i("DEBUG", "data Not Null");                  // Preprocessing                 Log.i("DEBUG", "Try For Image Processing");                 Camera.Parameters mParameters = camera.getParameters();                 Size mSize = mParameters.getPreviewSize();                 int mWidth = mSize.width;                 int mHeight = mSize.height;                 int[] mIntArray = new int[mWidth * mHeight];                  // Decode Yuv data to integer array                 decodeYUV420SP(mIntArray, data, mWidth, mHeight);                  // Converting int mIntArray to Bitmap and                  // than image preprocessing                  // and back to mIntArray.                  // Encode intArray to Yuv data                 encodeYUV420SP(data, mIntArray, mWidth, mHeight);                     } }      static public void decodeYUV420SP(int[] rgba, byte[] yuv420sp, int width,         int height) {     final int frameSize = width * height;      for (int j = 0, yp = 0; j < height; j++) {         int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;         for (int i = 0; i < width; i++, yp++) {             int y = (0xff & ((int) yuv420sp[yp])) - 16;             if (y < 0)                 y = 0;             if ((i & 1) == 0) {                 v = (0xff & yuv420sp[uvp++]) - 128;                 u = (0xff & yuv420sp[uvp++]) - 128;             }              int y1192 = 1192 * y;             int r = (y1192 + 1634 * v);             int g = (y1192 - 833 * v - 400 * u);             int b = (y1192 + 2066 * u);              if (r < 0)                 r = 0;             else if (r > 262143)                 r = 262143;             if        
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!