Verwenden Sie eine benutzerdefinierte Oberfläche, um die Vorschaudaten von Camerax zu rendernJava

Java-Forum
Anonymous
 Verwenden Sie eine benutzerdefinierte Oberfläche, um die Vorschaudaten von Camerax zu rendern

Post by Anonymous »

Ich verwende die Camerax -Komponente in Android und kann gemäß der Android -Dokumentation eine Vorschau verwenden. Ich möchte es jedoch nicht in der PreviewView -Komponente rendern. Ich möchte die Kamera-Vorschau auf eine benutzerdefinierte Oberfläche rendern. Ich habe viele Möglichkeiten ausprobiert, aber keiner von ihnen funktioniert. Ich hoffe, Hilfe von allen zu bekommen, danke < /p>
Ich erstelle auf angepasste Weise eine Oberfläche < /p>
Aktivität: < /p>

Code: Select all

Surface mPreviewSurfaces;
private int textureIds = 0;

public boolean InitTexture()
{
//by GL
int videoTextureId = FBOUtils.createOESTextureID();
textureIds = videoTextureId;
if (mSurfaceTexture != null) {
mSurfaceTexture.release();
}

mSurfaceTexture = new SurfaceTexture(textureIds);
TextureListenser listenser = new TextureListenser();
mSurfaceTexture.setDefaultBufferSize(1280, 720);
mSurfaceTexture.setOnFrameAvailableListener(null);
mSurfaceTexture.setOnFrameAvailableListener(listenser);
mPreviewSurfaces = new Surface(mSurfaceTexture);
return true;
}
< /code>
Create a service, configure and start a CameraX

Code: Select all

Service:< /code>
Preview.Builder builder = new Preview.Builder();< /code>
builder.setTargetRotation(Surface.ROTATION_90);< /code>
builder.setResolutionSelector(resolutionSelector);< /code>
_PreviewUseCase = builder.build();

Surface mSurface = CameraXApp.get_Surface();

_PreviewUseCase.setSurfaceProvider(request -> {
Size resolution = request.getResolution();
Log.d("Camera", "Requested resolution: " + resolution.getWidth() + "x" + resolution.getHeight());

if (mSurface != null && mSurface.isValid()) {
Log.d("Camera", "surface.....");
}

assert mSurface != null;
request.provideSurface(
mSurface,
ContextCompat.getMainExecutor(mActivity),
result -> {
Log.d(TAG, "surface complete");
}
);
});

_CameraProvider.bindToLifecycle(/* lifecycleOwner= */ (LifecycleOwner)mActivity, _CurrentCameraSelector, _PreviewUseCase);
< /code>
This program runs, and through the logs, I found that 'surface complete' is not printed out, and I cannot get the result through 'result'. I don’t know where the error is, and I hope everyone can give me some hints. Note that this code works correctly and displays the preview screen through _PreviewUseCase.setSurfaceProvider(R.id.PreviewView).

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post