захват изображения с помощью MediaMetadataRetriever и сохранение его на устройстве с использованием растрового изображения - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь сохранить растровое изображение в хранилище устройства, на котором будет работать это приложение, позволяя пользователю сделать снимок imageView и сохранить его без кнопки сохранения, но я не могу получить изображение для сохранения, Я провел последние несколько дней, глядя на примеры в Интернете, и я не могу решить проблему. Android Studio запускает приложение с новыми проблемами, но изображения все равно не будут сохранены на устройстве.

// это код, который получает изображение

View.OnClickListener btnCaptureOnClickListener = new View.OnClickListener(){
    @Override
    public void onClick(View v){



        int currentPosition = video.getCurrentPosition(); //in millisecond
        Toast.makeText(VideoViewer.this,
                "Current Position: " + currentPosition + " (ms)",
                Toast.LENGTH_LONG).show();

        // capture the image at current postion
        Bitmap bmFrame = 
myMediaMetadataRetriever.getFrameAtTime(currentPosition * 1000);

enter code here

        if(bmFrame == null){
            Toast.makeText(VideoViewer.this,
                    "bmFrame == null!",
                    Toast.LENGTH_LONG).show();
        }else {

            AlertDialog.Builder myCaptureDialog =
                    new AlertDialog.Builder(VideoViewer.this);
            ImageView capturedImageView = new ImageView(VideoViewer.this);
            capturedImageView.setImageBitmap(bmFrame);
            LinearLayout.LayoutParams capturedImageViewLayoutParams =
                    new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT);


capturedImageView.setLayoutParams(capturedImageViewLayoutParams);

// это код для сохранения файла на моем устройстве

            String root = 
Environment.getExternalStorageDirectory().getAbsolutePath();
            File MyDir = new File(root +"/save_images");
            MyDir.mkdirs();

            String fname = "Image-"+ O +".jpg";
            File file = new File (MyDir, fname);
            if (file.exists()) file.delete();
            try {
                FileOutputStream out = new FileOutputStream(file);
                bmFrame.compress(Bitmap.CompressFormat.JPEG,90, out);
                out.flush();
                out.close();
                Toast.makeText(VideoViewer.this, "saved picture", 
Toast.LENGTH_SHORT).show();

            }catch(Exception e ){
                e.printStackTrace();
            }
            myCaptureDialog.setView(capturedImageView);
            myCaptureDialog.show();

        }

    }
...