我的应用程序调用相机拍照并将其保存到我的应用程序本地目录(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 */
);
答案 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();
}
答案 3 :(得分:0)
使用
data.getExtras().get("data");//for getting bitmap
Uri u = intent.getData();// for getting the Uri and get the path from uri
从相机中获取数据