Я пытаюсь получить кадры видео из Camera2 API в Android Studio и выполнить простую обработку изображения для каждого кадра.
У меня проблема с отрисовкой обработанного кадра обратно на экран.
Я использую код из примера camera2raw .
Я изменяю значение пикселя в буфере, в котором хранятся все кадры.
Прямо сейчас я просто добавляю постоянное значение к каждому пикселю, чтобы увидеть, изменилось изображение на экране или нет.
Изображение на экране не изменяется, добавляя даже очень большое значение к каждому пикселю.
Поэтому я вполне уверен, что не записываю измененные значения пикселей обратно на экран.
Вот фрагмент кода из соответствующих частей программы:
ImageReader.OnImageAvailableListener imageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
try {
image = reader.acquireLatestImage();
ByteBuffer Y = image.getPlanes()[0].getBuffer();
ByteBuffer U = image.getPlanes()[1].getBuffer();
ByteBuffer V = image.getPlanes()[2].getBuffer();
int Yb = Y.remaining();
int Ub = U.remaining();
int Vb = V.remaining();
byte[] data = new byte[Yb + Ub + Vb ];
//your data length should be this byte array length.
for (int i = 0; i < 512; i++)
{
for (int j = 0; j < 512; j++)
{
int idx = i * 512 + j;
data[idx] += 255;
}
}
// Screen should now show some distortion.
Y.get(data, 0, Yb);
U.get(data, Yb, Ub);
V.get(data, Yb+ Ub, Vb);
} catch (Exception ee) {
} finally {
if (image != null)
image.close();
}
}
//void save(byte[] bytes) {
File file12 = getOutputMediaFile();
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file12);
outputStream.write(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null)
outputStream.close();
} catch (Exception e) {
}
}
// }
};
Пожалуйста, дайте мне знать, если предоставление дополнительных пояснений или разделов кода поможет прояснить мой вопрос.
Может кто-нибудь подсказать, пожалуйста, как я записываю обратно на экран модифицированный кадр?
Я также пытался сделать это:
// Convert bytes data into a Bitmap
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
ImageView imageView = new ImageView(MainActivity.this);
// Set the Bitmap data to the ImageView
imageView.setImageBitmap(bmp);
// Get the Root View of the layout
ViewGroup layout = (ViewGroup) findViewById(android.R.id.content);
// Add the ImageView to the Layout
layout.addView(imageView);
Есть сообщения, связанные с этой проблемой, но ни одно не имеет точного решения. Может кто-нибудь дать мне ссылку на подробные пошаговые инструкции о том, как добиться того, что я описал?