Ich baue ein Bildbearbeitungsprogramm mit Android Kamera2. Da das Bildformat jedes aufgenommenen Bildes YUV_420_888 ist, muss es für die Bildverarbeitung effizient in RGB umgewandelt werden. Ich habe viel gegoogelt und gelesen (besonders die folgenden zwei Links) und schließlich herausgefunden, dass das Renderscript die Lösung sein kann. Ich weiß jedoch nicht, wie ich das Skript yuv2rgb in meinem Code verwenden soll.Wie transformiert man jeden YUV_420_888-Rahmen effizient in RGB (z. B. mit psrtscript yuv2rgb.rs) in Android camera2?
http://werner-dittmann.blogspot.jp/2016/03/using-android-renderscript-to-convert.html
Convert android.media.Image (YUV_420_888) to Bitmap
Derzeit verwende ich die TextureView Oberfläche, um die Vorschau zu zeigen, und verwenden Sie Imagereader jeden YUV_420_888 Rahmen in onImageAvailable Funktion zu erfassen.
protected void createCameraPreview() {
try {
SurfaceTexture texture = textureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());
Surface surface = new Surface(texture);
Surface mImageSurface = mImageReader.getSurface();
captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
captureRequestBuilder.addTarget(surface)
List surfaces = new ArrayList<>();
surfaces.add(surface);
surfaces.add(mImageSurface);
captureRequestBuilder.addTarget(mImageSurface);
cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler);
cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback(){
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
//The camera is already closed
if (null == cameraDevice) {
return;
}
// When the session is ready, we start displaying the preview.
cameraCaptureSessions = cameraCaptureSession;
updatePreview();
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Toast.makeText(MainActivity.this, "Configuration change", Toast.LENGTH_SHORT).show();
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image img = null;
img = reader.acquireNextImage(); // we got YUV_420_888 frame here
// transform to RGB format here?
// image processing
}
};
Wie meine Codes zu aktualisieren, das Ziel zu erreichen (zum Beispiel der yuv2rgb.rs verwendet wird)? Vielen Dank.
Danke. Eddy. Ich verwende den Code von folgendem Link. http://stackoverflow.com/questions/36212904/yuv-420-888-interpretation-on-samsung-galaxy-s7-camera2. Ich teste es immer noch. Wird bald die Antwort liefern. –