jpeg文件上的Android BitmapFactory.decodeFile返回null

时间:2018-04-12 12:00:28

标签: android bitmapfactory

我的应用程序调用相机拍照并将其保存到我的应用程序本地目录(getApplicationContext().getFilesDir())中,该目录正常。

当我尝试使用BitmapFactory将图片转换为位图时,结果为null。这是我使用的代码:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;

String picturePath = pictureFile.getAbsolutePath();
Bitmap bitmap = BitmapFactory.decodeFile(picturePath, options);

请注意,pictureFile创建如下:

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

4 个答案:

答案 0 :(得分:0)

创建临时文件:

File tempFile = File.createTempFile("temp_file, ".jpg", this.getExternalCacheDir());

创建路径:

String mPath = tempFile.getAbsolutePath();

现在在你的activityResult

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inSampleSize = 8;
Bitmap bitmap = BitmapFactory.decodeFile(mPath, options);

答案 1 :(得分:0)

假设您正在使用java.io.File类,根据Java docs函数.createTempFile在系统上创建空文件。

因此,此文件将只包含没有任何内容的元信息,长度为零,这可能是无法提取位图的原因。

因此,您需要使用new File()

创建文件对象实例而不是确认文件

如果您希望在早期实施中减少内存泄漏的可能性,也可以使用WeakRefference和类似于您创建的位图。

答案 2 :(得分:0)

您是否忘记了添加权限READ_EXTERNAL_STORAGE和/或WRITE_EXTERNAL_STORAGE?

File locationOfFile = new 
File(Environment.getExternalStorageDirectory().getAbsolutePath()+ "/images");
File destination= new File(locationOfFile , fileName + ".JPG");
FileInputStream fileInputStream;
fileInputStream= new FileInputStream(destination);
Bitmap img = BitmapFactory.decodeStream(fileInputStream);

这是我项目中的工作代码:

            View imageHolder = LayoutInflater.from(this).inflate(R.layout.image_item, null);
            ImageView thumbnail = (ImageView) imageHolder.findViewById(R.id.media_image);

            try {

                String path = uri.getPath();
                Bitmap bmImg = BitmapFactory.decodeFile(path);

                Point p = new Point();
                p.set(100, 100);
                Bitmap bitmapp = waterMark(bmImg, mRefNo, p, Color.RED, 90, 60, true);

                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bitmapp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                Glide.with(this)
                        .load(stream.toByteArray())
                        .asBitmap()
                        .error(R.mipmap.ic_launcher)
                        .into(thumbnail);

                mSelectedImagesContainer.addView(imageHolder);
                thumbnail.setLayoutParams(new FrameLayout.LayoutParams(wdpx, htpx));
            } catch (Exception e) {
                e.printStackTrace();
            }

希望这会对你有所帮助 其他有用的Links1 Link2

答案 3 :(得分:0)

使用

data.getExtras().get("data");//for getting bitmap
Uri u = intent.getData();// for getting the Uri and get the path from uri

从相机中获取数据