Я пытаюсь получить изображение из своей галереи и установить его на вид. Я использую эту библиотеку в качестве моего представления 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
Форум для тех, кто программирует под Android
1738362622
Anonymous
Я пытаюсь получить изображение из своей галереи и установить его на вид. Я использую эту библиотеку в качестве моего представления 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);
}
[b] edit: [/b] эта строка - это то, что возвращает мой 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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/45865411/attempt-to-invoke-virtual-method-bitmap-getwidth-on-a-null-object-reference[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия