Используйте пользовательскую поверхность, чтобы отобразить данные предварительного просмотра CAMERAXJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Используйте пользовательскую поверхность, чтобы отобразить данные предварительного просмотра CAMERAX

Сообщение Anonymous »

Я использую компонент Camerax в Android, и в соответствии с документацией Android я могу использовать Preview.setsurfaceprovider () для настройки интерфейса рендеринга. Тем не менее, я не хочу отображать его в компоненте PreviewView; Я хочу представить предварительный просмотр камеры на пользовательскую поверхность. Я пробовал много способов, но ни один из них не работает. Я надеюсь получить помощь от всех, спасибо < /p>
Я создаю поверхность индивидуальным способом < /p>
Активность: < /p>

Код: Выделить всё

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

Код: Выделить всё

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).

Подробнее здесь: https://stackoverflow.com/questions/794 ... eview-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»