Спасибо за чтение.BitmapFactory.Decode возвращает null
[EDIT] Если я опускаю варианты, т.е.
Bitmap bmp = BitmapFactory.decodeFile(picturePath);
Затем он возвращает битовую карту.
Но с опциями в качестве аргумента, то есть,
bmp = BitmapFactory.decodeFile(picturePath, options);
возвращает нуль.
Кто-нибудь может угадать недостающие или неправильные варианты?
Еще раз спасибо,
[Конец EDIT]
Цель состоит в том, чтобы выбрать изображение, декодирует его, если необходимо, сохранить его, а затем загрузить его в ImageView.
Декодер BitmapFactory всегда возвращает null. У меня есть разрешения, установленные в манифесте, путь появляется полный .. /storage/emulated/0/aerg.png
Смотрите ниже:
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data)
{
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
String imageType = options.outMimeType;
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
BitmapFactory.decodeFile(picturePath, options);
int inSampleSize = 1;
if (height > mheight || width > mWidth)
{
final int halfHeight = height/2;
final int halfWidth = width/2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight/inSampleSize) > mheight
&& (halfWidth/inSampleSize) > mWidth)
{
inSampleSize *= 2;
}
}
options.inSampleSize = inSampleSize;
Bitmap bmp = BitmapFactory.decodeFile(picturePath,options);
String downsampledPicturePath = saveImage(bmp, picturePath, "PrinterImages");
Bitmap b = BitmapFactory.decodeFile(downsampledPicturePath);
iv.setImageBitmap(b);
//ImageView imageView = (ImageView) findViewById(R.id.theImageView);
//imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
}
private String saveImage(Bitmap bmp, String path, String folderName)
{
Context context = getApplicationContext();
File folder = context.getDir(folderName, Context.MODE_PRIVATE); //Creating an internal dir;
String pictureName = path.substring(path.lastIndexOf("/") + 1);
String picture = new File(folder, pictureName).getAbsolutePath();
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(picture);
// Use the compress method on the BitMap object to write image to the OutputStream
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception e)
{
e.printStackTrace();
}
return picture;
}
Я был на этом в течение нескольких дней, любая помощь приветствуется! – Shaare
Хорошо, я заплачу Starbucks всем, кто поможет мне понять это. – Shaare