我试图找到一种使用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指定为颜色格式)。
任何人都知道如何使用它,如果它甚至可能或它做了什么呢?