使用ColorMatrix.setRGB2YUV()将RGB8888转换为YUV420

时间:2014-04-01 07:50:30

标签: java android javacv yuv colormatrix

我试图找到一种使用Android SDK将RGB转换为YUV的更快方法,因为像素方法的标准像素在Java中相当慢。 ColorMatrices看起来非常有效,我看到有一个setRGB2YUV()方法,但是我找不到任何例子,文档只是说"设置矩阵将RGB转换为YUV"像往常一样完全没用。

这是我的初始化代码的一部分,由于多线程,它与数组稍微有些混淆:

cacheBitmaps = new Bitmap[NumberOfThreads];
cacheCanvas = new Canvas[NumberOfThreads];
mRGB2YUV = new ColorMatrix();   
cmfRGB2YUV = new ColorMatrixColorFilter(mRGB2YUV);
pRGB2YUV = new Paint();
pRGB2YUV.setColorFilter(cmfRGB2YUV);
for (int m=0; m< NumberOfThreads; m++) {
   cacheBitmaps[m] = Bitmap.createBitmap(widthX,heightY, Config.ARGB_8888);
   cacheCanvas[m] = new Canvas(cacheBitmaps[m]);
}

稍后我使用它将RGB绘制到具有指定paint:

的画布
cacheCanvas[n].drawBitmap(fb.frames[n].getAndroidBitmap(),0,0, pRGB2YUV);

我还尝试使用标准矩阵,不应对RGB值进行任何更改,如下所示:

float[] matrix = { 
0, 1, 0, 0, 0, //red
0, 0, 1, 0, 0, //green
0, 0, 0, 1, 0, //blue
0, 0, 0, 0, 1 //alpha
};
mRGB2YUV.set(matrix);

无论我做什么,我都会在输出视频中获得黑色,绿色或扭曲的帧(使用带有FFMPEG的JavaCV并在将最终位图复制到IplImage后将AV_PIX_FMT_NV21指定为颜色格式)。

任何人都知道如何使用它,如果它甚至可能或它做了什么呢?

0 个答案:

没有答案