SetImageBitmap显示白色空白全屏

时间:2016-10-31 16:05:14

标签: android

我有一个可以打开CameraActivity的CardActivity。我有一个图像按钮我按,然后本机相机应用程序打开,我可以拍照。我尝试使用ByteArray的意图将其传递回我的CardActivity。但它给了我一个空白的白色屏幕。它不会在imageview中插入任何内容。 Bitmap元素不是null,它有一些东西。

这是我启动相机活动和设置图像的开关:

switch (v.getId()) {
                case R.id.pButton1:
                    Intent cam = new Intent(CardActivity.this, CameraActivity.class);
                    startActivity(cam);
                    returnImage2();
                    mImageView = (ImageView)findViewById(R.id.imageView);
                    mImageView.setImageBitmap(bitmap);
                    mImageView.setRotation(180);
                    break;

这是我的returnImage2();

public void returnImage2() {

        try {
            bitmap = BitmapFactory.decodeStream(this.openFileInput("myImage"));
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

这是我的cameraActivity:

    public class CameraActivity extends Activity {
        private String mCurrentPhotoPath;
        private ImageView mImageView;
        private Bitmap mImageBitmap;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            dispatchTakePictureIntent();
        }
        public void dispatchTakePictureIntent() {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            // Ensure that there's a camera activity to handle the intent
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                // Create the File where the photo should go
                File photoFile = null;
                try {
                    photoFile = createImageFile();
                } catch (IOException ex) {
                    // Error occurred while creating the File
                    System.out.println("ERR CANNOT CREATE FILE");
                }
                // Continue only if the File was successfully created
                if (photoFile != null) {
                    Uri photoURI = FileProvider.getUriForFile(this,
                            "com.example.android.fileprovider",
                            photoFile);
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                    startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
                }
            }
        }
        private File createImageFile() throws IOException {
            // Create an image file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            String imageFileName = "JPEG_" + timeStamp + "_";
            File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

            File image = File.createTempFile(
                    imageFileName,  /* prefix */
                    ".jpg",         /* suffix */
                    storageDir      /* directory */
            );

            // Save a file: path for use with ACTION_VIEW intents
            mCurrentPhotoPath = "file:" + image.getAbsolutePath();
            return image;
        }
        private File createImageFile2() throws IOException {
            // Create an image file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            String imageFileName = "JPEG_" + timeStamp + "_";
            File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

            File image = File.createTempFile(
                    imageFileName,  /* prefix */
                    ".jpg",         /* suffix */
                    storageDir      /* directory */
            );

            // Save a file: path for use with ACTION_VIEW intents
            mCurrentPhotoPath = "file:" + image.getAbsolutePath();
            return image;
        }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                try {
                    mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath));
                    cImageFromBitmap(mImageBitmap);
                    //mImageView = (ImageView)findViewById(R.id.imageView);
                    //mImageView.setImageBitmap(mImageBitmap);
                    //mImageView.setRotation(180);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        public String cImageFromBitmap(Bitmap bitmap){
            String fileName = "myImage";//no .png or .jpg needed
            try {
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                FileOutputStream fo = openFileOutput(fileName, Context.MODE_PRIVATE);
                fo.write(bytes.toByteArray());
                // remember close file output
                fo.close();
            } catch (Exception e) {
                e.printStackTrace();
                fileName = null;
            }
            return fileName;
        }
}

1 个答案:

答案 0 :(得分:0)

我注意到您正在使用REQUEST_TAKE_PHOTO开始活动

             startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)

但您正在REQUEST_IMAGE_CAPTURE

上查看onActivityResult
             if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {

ALSO:

我不知道您为什么要完成所有这些工作来创建文件。当您使用ACTION_IMAGE_CAPTURE时,位图本身会返回到结果意图中:

            if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
                try {
                    mImageBitmap = (Bitmap) data.getExtras().get("data");