繁体   English   中英

在 opengl 中显示图像正在处理来自画廊的图片,但来自相机的图片不

[英]Show an image in opengl is working with pictures from gallery but from camera doesn't

我在 OpenGL 中显示图像时遇到了一些麻烦。

实际上,我可以在 opengl 中显示来自画廊的图像。 当我尝试从相机显示一个时,就会出现问题。

对我来说,OpenGL 必须像在画廊中一样显示来自相机的图像。 显然我做错了什么。

任何帮助将不胜感激。

来自画廊的意图:

 Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    intent.setType("image/");
                    startActivityForResult(intent, 2);

来自相机的意图:

Intent takePic = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePic.resolveActivity(getPackageManager()) != null) {
        File imagen = controler.createPhotoFile(getExternalFilesDir(Environment.DIRECTORY_PICTURES));
        if (imagen != null) {
            photoUri = FileProvider.getUriForFile(this, "my.fileprovider", imagen);
            takePic.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
            startActivityForResult(takePic, 1);
        }
    }

这是我的 onActivityResult,我将 URI 发送到将其转换为 bitmap 并发送的方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case 1:
                sendImagenPanel(photoUri);
                break;
            case 2:
                sendImagenPanel(data.getData());
                break;
        }
    }
}

private void sendImagenPanel(Uri uri) {
    Bitmap bitmap = null;
    try {
        bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
    } catch (IOException e) {
        e.printStackTrace();
    }
    final Bitmap imagen = controler.getCroppedBitmap(controler.scaledBitmap(bitmap, 256));
    final CasillaOG casilla = ((GLSurfacePanel) gLViewPanel).getRendererPanel().getCuboSelected();
    gLViewPanel.queueEvent(new Runnable() {
        @Override
        public void run() {
            casilla.loadNewTexture(imagen);
            casilla.setImagen(imagen);
        }
    });
    gLViewPanel.requestRender();
}

万一有人感兴趣。 我意识到问题不在于调用 OpenGL 的方法。 如果我在我的三星 Galaxy Tab A 中的 onActivityResult 作品上运行相同的代码,但不是在相机一上,为什么我提到我的设备? 因为如果我在华为 P9 lite 上运行该应用程序,画廊图像也不会显示。 在这两种情况下,控制台上都会出现下一个问题:在没有当前上下文的情况下调用 opengl es api(每个线程记录一次)

搜索该问题后,我认为相机和画廊的意图使用 OpenGL 并且它与我自己的 OpenGL 环境发生冲突。

最后,我选择设置一个 bitmap 字段并在 onDrawFrame 上添加纹理。 显然,用一个 boolean 来做一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM