簡體   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