Я пытаюсь получить изображение из своей галереи и установить его на вид. Я использую эту библиотеку в качестве моего представления Cropper. . < /p>
Я пробовал string fname = new File (abspath, "test.png"). getabsolutepath (); < /code>, но не работает. Я не думаю, что знаю, как это реализовать. Я бы признателен за каждую помощь, которую я могу получить. Заранее спасибо! < /P>
код: < /p>
public void addImage(View view) {
SharedPreferences galleryAccess_2 = getSharedPreferences("GALLERY_ACCESS", Context.MODE_PRIVATE);
boolean galleryAccessNum = galleryAccess_2.getBoolean("galleryAccess", false);
if (galleryAccessNum) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 2);
} else {
accessGallery();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 2:
if (resultCode == RESULT_OK) {
selectedImage = data.getData();
String absPath = selectedImage.toString();
//String fname=new File(absPath, "test.png").getAbsolutePath();
//String absPath = BitmapUtils.getFilePathFromUri(this, data.getData());
loadNewImage(absPath);
}
}
private void loadNewImage(String filePath) {
//Log.i(TAG, "load image: " + filePath);
mBitmap = BitmapFactory.decodeFile(filePath);
//Log.i(TAG, "bitmap: " + mBitmap.getWidth() + " " + mBitmap.getHeight());
int maxP = Math.max(mBitmap.getWidth(), mBitmap.getHeight()); //***ERROR*** on this line****
float scale1280 = (float)maxP / 1280;
if (mCropperView.getWidth() != 0) {
mCropperView.setMaxZoom(mCropperView.getWidth() * 2 / 1280f);
} else {
ViewTreeObserver vto = mCropperView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
mCropperView.getViewTreeObserver().removeOnPreDrawListener(this);
mCropperView.setMaxZoom(mCropperView.getWidth() * 2 / 1280f);
return true;
}
});
}
mBitmap = Bitmap.createScaledBitmap(mBitmap, (int)(mBitmap.getWidth()/scale1280),
(int)(mBitmap.getHeight()/scale1280), true);
mCropperView.setImageBitmap(mBitmap);
}
edit: эта строка - это то, что возвращает мой abspath: content: //com.google.android.apps.photos.contentprovider/0/ 1/Содержание%3A%2F%2FMEDIA%2FEXTERNAL%2FIMAGE%2FMEDIA%2F25732/ORIGINAL/NONE/272125879
Ответ: < /p>
Я нашел ответ. См. Изменения в коде ниже. Откровенно говоря, я думаю, что маркировка дубликата, если очень безответственна от φxocę 웃 pepeúpa ツ. Мой вопрос не задал вопрос о том, что или почему я получаю NPE. Я только что показал, что в какой -то момент я получил NPE. Это не означает, что я спрашиваю, что такое NPE или почему. Смысл маркировки дубликата состоит в том, чтобы убедиться, что ответы на тот же вопрос попадают в одно и то же место, но этот ответ определенно не принадлежит там. Кстати, этот предложенный ответ вообще не помог. Спасибо @deadmc, хотя, по крайней мере, попытки помочь. < /P>
код: < /p>
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 2:
if (resultCode == RESULT_OK) {
try {
selectedImage = data.getData();
is = getContentResolver().openInputStream(selectedImage);
loadNewImage(is);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void loadNewImage(InputStream filePath) {
try {
mBitmap = BitmapFactory.decodeStream(filePath);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
//Log.i(TAG, "load image: " + filePath);
//Log.i(TAG, "bitmap: " + mBitmap.getWidth() + " " + mBitmap.getHeight());
int maxP = Math.max(mBitmap.getWidth(), mBitmap.getHeight());
float scale1280 = (float)maxP / 1280;
if (mCropperView.getWidth() != 0) {
mCropperView.setMaxZoom(mCropperView.getWidth() * 2 / 1280f);
} else {
ViewTreeObserver vto = mCropperView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
mCropperView.getViewTreeObserver().removeOnPreDrawListener(this);
mCropperView.setMaxZoom(mCropperView.getWidth() * 2 / 1280f);
return true;
}
});
}
mBitmap = Bitmap.createScaledBitmap(mBitmap, (int)(mBitmap.getWidth()/scale1280),
(int)(mBitmap.getHeight()/scale1280), true);
mCropperView.setImageBitmap(mBitmap);
}
Подробнее здесь: https://stackoverflow.com/questions/458 ... -reference
Попытка вызвать виртуальный метод «bitmap.getWidth ()» на ссылке на нулевой объект [Duplicate] ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Исключение NullPointer в BitMap.getwidth() в chromium-TrichromeWebViewGoogle.aab
Anonymous » » в форуме Android - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-