Android Studio Color int数组为Color int矩阵

时间:2016-11-03 16:10:47

标签: android arrays bitmap camera preview

我正在使用Android Studio 2.2,我从相机中获取byte[] data来自onPreviewFrame()的数组。我有一个可变位图,其大小与相机图像的分辨率相同。我想用int[] arraybyte[] data数组转换为YUVRGB格式的public static void correctWithIntArray(Bitmap bmp,int[] data) { for(int y=0;y<bmp.getHeight();y++) { for(int x=0;x<bmp.getWidth();x++) { bmp.setPixel(x,y,data[y*bmp.getHeight() + x]); } } } 像素来覆盖位图的像素。所以我做了以下几点:

correctWithIntArray

但是我在输出中得到了一个非常奇怪的结果。

以下是我使用Android类获取图像的图像: Original

这是我使用int[] data时得到的图像: CorrectedImage

我在那个循环中做错了什么?

在我的函数中创建/** * Converts YUV420 NV21 to RGB8888 * * @param data byte array on YUV420 NV21 format. * @param width pixels width * @param height pixels height * @return a RGB8888 pixels int array. Where each int is a pixels ARGB. */ public static int[] convertYUV420_NV21toRGB8888(byte [] data, int width, int height) { int size = width*height; int offset = size; int[] pixels = new int[size]; int u, v, y1, y2, y3, y4; // i percorre os Y and the final pixels // k percorre os pixles U e V for(int i=0, k=0; i < size; i+=2, k+=2) { y1 = data[i ]&0xff; y2 = data[i+1]&0xff; y3 = data[width+i ]&0xff; y4 = data[width+i+1]&0xff; u = data[offset+k ]&0xff; v = data[offset+k+1]&0xff; u = u-128; v = v-128; pixels[i ] = convertYUVtoRGB(y1, u, v); pixels[i+1] = convertYUVtoRGB(y2, u, v); pixels[width+i ] = convertYUVtoRGB(y3, u, v); pixels[width+i+1] = convertYUVtoRGB(y4, u, v); if (i!=0 && (i+2)%width==0) i+=width; } return pixels; } 数组的函数是:

boost::filter_iterator

1 个答案:

答案 0 :(得分:0)

我使用setPixels()函数解决了问题:

/**
 * @param bmp Must be mutable.
 * @param data
 */
public static void correctWithByteArray(Bitmap bmp,int[] data) {
    bmp.setPixels(data,0,bmp.getWidth(),0,0,bmp.getWidth(),bmp.getHeight());
}

所以我找不到问题的答案,但我解决了我的问题。