Миниатюры и выбор изображений Picasa из галереи на ICS

1

Мне нелегко получить Thumbnails.getTumbnail для работы с фотографиями picasa на Nexus S, работающем с ICS. Все остальное, похоже, работает, включая получение исходного изображения из picasa и его отображение, но getThumbnail, похоже, не работает. При попытке его использования возникают следующие ошибки:

E/MiniThumbFile( 1852): Got exception when reading magic, id = 5745625138093120418, disk full or mount read-only? class java.lang.IllegalArgumentException
W/MediaProvider(  540): original media doesn't exist or it canceled.

Диск не заполнен, он предназначен для чтения-записи, у приложения есть права на запись в хранилище, и изображение действительно существует на picasa (я могу просмотреть его через приложение Android-андроида).

Тот же код отлично работает на Android 2.3, но он следует немного по-другому, поскольку 2.3, похоже, загружает копию фотографии и передает вам фактический локальный файл://uri для недавно загруженного изображения, а не передает вам контент ://uri.

Это основное мясо кода, о котором идет речь:

  public void addImage(Uri uri, boolean local)
  {
     ContentResolver resolver = getContentResolver();
     Uri actualUri = uri;

     Log.d(TAG, "addImage: original uri: " + uri.toString());

     if(local) {
        try {
           List<String> uriPath = uri.getPathSegments();
           String contentUri = Media.insertImage(resolver, uri.getPath(), uriPath.get(uriPath.size()-1), new String());
           actualUri = Uri.parse(contentUri);
        }
        catch(java.io.FileNotFoundException ex) {
           Log.e(TAG, "FileNotFoundException: ");
           ex.printStackTrace();
        }
     }

     Log.d(TAG, "addImage: actual uri: " + actualUri.toString());

     List<String> uriPath = actualUri.getPathSegments();
     long imageId = Long.parseLong(uriPath.get(uriPath.size() -1));

     Bitmap thumb = Thumbnails.getThumbnail(resolver, imageId, Thumbnails.MINI_KIND, null);
     if(thumb == null) {
        Log.e(TAG, "Failed to get thumbnail for our image.");
        Toast toast = Toast.makeText(getApplicationContext(), "Failed to get thumbnail for image. Please try again.", Toast.LENGTH_SHORT);
        toast.show();
        return;
     }

     uris.add(uri);
     bmps.add(thumb);
     notifyDataSetChanged();
  }

Этот метод называется, когда когда-либо в приложение добавляется новая фотография фотографий. Когда он известен как локальный образ (т.е. Если фотография была сделана изнутри приложения или аргумент данных onActivityResult равен null), локальный параметр имеет значение true, и я пытаюсь получить контент://uri обратно из поэтому мы можем получить действительный идентификатор изображения, чтобы перейти к Thumbnails.getThumbnail. Этот код отлично работает для изображений, полученных из приложения Camera (через startActivityForResult), а также изображений из галереи, которые хранятся локально на устройстве.

Я немного в тупике.

  • 0
    Лучший ответ для меня: stackoverflow.com/a/8936697/994324 <br> Это работает для всех случаев (на самом деле): Picasa и локальных картинок, и это намного более чисто.
  • 0
    @Tomasu..Tomasu .. Большое вам спасибо, дорогой, я решил мою проблему с помощью примера кода Quesion. в любом случае я хотел бы поделиться своим кодом с вами в ответ. Надеюсь, это поможет и другим. :)
Теги:
thumbnails
picasa
android-4.0

2 ответа

0

Имела та же проблема, и это была проблема импорта/пакета.

Обязательно используйте правильный класс миниатюр. Есть два. Один для видео и один для изображений.

MediaStore.Images.Thumbnails
MediaStore.Video.Thumbnails
0

https://developers.google.com/picasa-web/docs/2.0/reference#media_group

Если вам трудно в андроиде добраться до эскизов, обратите внимание на приведенную выше ссылку и api и на медиа: групповой/мультимедийный тег в корне атома. Это родительский элемент или контейнер эскизов, на которые ссылаются в этом сообщении

Итак, чтобы обрабатывать большие пальцы в Android, если вы можете структурировать свой код для фактического использования api (фиды picasa/photos/media: group и т.д.), У вас может быть меньше проблем с ошибками, подобных настоящему.

Пример кода google/android/picasa

api ref

еще один api ref

  • 0
    Привет, спасибо за ответ. Меня не особенно интересуют фотографии из Picasa для начала в приложении, над которым я сейчас работаю, но я бы хотел, чтобы текущая функциональность «просто работала». К сожалению, класс Thumbnail просто не знает, как создавать миниатюры из изображений Picasa. Я написал кучу пользовательских изображений для захвата, масштабирования и миниатюры (код миниатюры - это на самом деле просто код масштабирования изображения, но специально подобранный по размеру миниатюры), который правильно обрабатывает показ «полноразмерных» фотографий (масштабируется до максимального размера текстуры) ) и миниатюры с правильной ориентацией.
  • 0
    По сути, я выбрал исходное изображение из Picasa, а затем сделал его эскиз. Кажется, работает просто отлично. И поскольку по умолчанию я использую класс ContentResolver, этот бит обрабатывается автоматически.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню