我想了解有关Camera2 API的更多信息。因此,我从这里https://github.com/googlesamples/android-Camera2Basic下载了Camera2的官方示例,并对其进行了一些测试,直到了解了它的工作原理。 因此,现在我问自己是否可以实时处理帧,这是一个很酷的功能。 我假设可以在 ImageReader 类的 onImageAvailable ()方法中完成此操作。
因此,我实现了以下几行
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
int width, heigth;
int[] pixels;
try {
image = reader.acquireLatestImage();
if (image != null) {
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes, 0, bytes.length);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);;
width = bitmap.getWidth();
heigth = bitmap.getHeight();
pixels = new int[width*heigth];
bitmap.getPixels(pixels, 0, width, 0, 0, width, heigth);
FilterLib.floydsteinberg(pixels, width, heigth);
bitmap.setPixels(pixels, 0, width, 0, 0, width, heigth);
image.close();
}
} catch (Exception e) {
Log.w("ImageReader", e.getMessage());
}
mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
}
};
所以,我要做的是从图像中提取位图。然后,将生成的位图传递给 floydsteinberg ()方法,该方法是Floyd-Steinberg算法的本机实现。 本机实现的工作是获取像素,然后根据上述算法对其进行处理,然后将处理后的像素返回,该像素又将成为位图的新像素。
但是现在:如何在屏幕上看到新的(处理过的)位图?更具体地说,是否有一种方法可以将该位图转换为图像?
我发现了一些camera2 output to Bitmap或Android Camera2 API Showing Processed Preview Image之类的SO线程,但是我对此并不太了解。