Я пытаюсь получить картину от SurfaceView, где я имею вид камеры работает,onPreviewFrame YUV полутоновой перекос
Я уже внедренные onPreviewFrame, и это называется правильно, как отлаживать показывает мне.
Проблема, с которой я столкнулся сейчас, это то, что я получаю данные в байтах [] в методе, в цвете пространства YUV (NV21), я пытаюсь преобразовать его в оттенки серого для создания растрового изображения, а затем для сохранения это в файл.
Процесс преобразования, который я следую за это:
public Bitmap convertYuvGrayScaleRGB(byte[] yuv, int width, int height) {
int[] pixels = new int[width * height];
for (int i = 0; i < height*width; i++) {
int grey = yuv[i] & 0xff;
pixels[i] = 0xFF000000 | (grey * 0x00010101);
}
return Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);
}
Процедура импорта для хранения его в файл, это:
Bitmap bitmap = convertYuvGrayScaleRGB(data,widht,heigth);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 50, bytes);
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test.jpg");
Log.d("Camera", "File: " + f.getAbsolutePath());
try {
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.close();
bitmap.recycle();
bitmap = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Altough, результат я получил это следующее: