I have a camera application project and I want to take two photos at 200 ms intervals. but usually takes pictures at intervals of 450-550 ms. How can I take photos faster? I open camera surface view and when ı push to button handler start the timer and when time reach to 60000-millisecond camera capture first image and after 200 ms capture the second image
Heading
public class camerax_timer extends AppCompatActivity {
private TextureView textureView;
TextView editColor;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camerax_timer);
editColor=findViewById(R.id.textcolor);
textureView = findViewById(R.id.view_finder);
textureView.post((Runnable)(new Runnable()
{
public final void run()
{
startCamera();
}
}));
textureView.addOnLayoutChangeListener(new View.OnLayoutChangeListener()
{
@Override
public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft,
int oldTop, int oldRight, int oldBottom)
{
updateTransform();
}
});
Button button_ileri=findViewById(R.id.ileri_image);
button_ileri.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent =new Intent(camerax_timer.this,veri_hesaplama.class);
startActivity(intent);
}
});
}
private void startCamera()
{
PreviewConfig.Builder previewConfig = new PreviewConfig.Builder();
Preview preview = new Preview(previewConfig.build());
preview.setOnPreviewOutputUpdateListener(new Preview.OnPreviewOutputUpdateListener()
{
@Override
public void onUpdated(Preview.PreviewOutput output)
{
ViewGroup parent = (ViewGroup) textureView.getParent();
parent.removeView(textureView);
parent.addView(textureView, 0);
textureView.setSurfaceTexture(output.getSurfaceTexture());
updateTransform();
}
});
ImageCaptureConfig.Builder imageCaptureConfig = new ImageCaptureConfig.Builder();
final ImageCapture imageCapture = new ImageCapture(imageCaptureConfig.build());
final Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
imageCapture.takePicture(new ImageCapture.OnImageCapturedListener() {
@Override
public void onCaptureSuccess(ImageProxy image, int rotationDegrees) {
ImageView imageView = findViewById(R.id.img1);
imageView.setImageBitmap(imageProxyToBitmap(image));
imageView.setRotation(rotationDegrees);
image.close();
}
});
}
}, 60000);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
imageCapture.takePicture(new ImageCapture.OnImageCapturedListener() {
@Override
public void onCaptureSuccess(ImageProxy image, int rotationDegrees) {
ImageView imageView = findViewById(R.id.img2);
imageView.setImageBitmap(imageProxyToBitmap(image));
imageView.setRotation(rotationDegrees);
image.close();
}
});
}
}, 60200);
}
});
CameraX.bindToLifecycle(this, preview, imageCapture);
}
private void updateTransform()
{
Matrix matrix = new Matrix();
float centerX = textureView.getWidth() / 2f;
float centerY = textureView.getHeight() / 2f;
float rotationDegrees = 0;
matrix.postRotate(-rotationDegrees, centerX, centerY);
textureView.setTransform(matrix);
}
private Bitmap imageProxyToBitmap(ImageProxy image)
{
ImageProxy.PlaneProxy planeProxy = image.getPlanes()[0];
ByteBuffer buffer = planeProxy.getBuffer();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
}