Изображение из файла расширения Android выглядит слишком маленьким

Я нахожусь в процессе реализации файлов расширения для моего приложения для Android.

До сих пор я поместил несколько изображений и аудиофайлов в основной файл расширения (я не использую файл расширения патча). Ни один из файлов не был сжат.

Через приложение я могу скачать файл расширения и без проблем воспроизводить аудиофайлы. Одновременно воспроизводится аудиофайл в файле расширения, я также отображаю изображение из файла расширения. Тем не менее, изображение значительно меньше, чем я ожидал.

Изображение 320x400px. Перед реализацией файлов расширения он отображался в моем приложении, как и ожидалось. Тем не менее, после реализации это выглядит так, как будто изображение уменьшилось до 50 пикселей в ширину (высота уменьшилась пропорционально).

Затем я попробовал решение, предложенное в разделе Как создать рисованный объект из потока без изменения его размера. Несмотря на то, что изображение выглядит немного больше, оно все равно намного меньше того, что я хочу (похоже, теперь оно размером около 100x125 пикселей). В настоящее время мой код для отображения изображения выглядит так:

public void displayImageFromExpansionFile(){
    Bitmap b = BitmapFactory.decodeStream(fileStream);
    b.setDensity(Bitmap.DENSITY_NONE);
    Drawable d = new BitmapDrawable(this.getResources(), b);
    imageToDisplay.setImageDrawable(d);
}

public void showImg(int imgNum){
    switch(imgNum){
        case(1):
            try{
                if((getResources().getConfiguration().screenLayout & 
                        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL){
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for small image");
                }
                else if((getResources().getConfiguration().screenLayout & 
                        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){                       
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for normal image");
                }
                else if((getResources().getConfiguration().screenLayout & 
                        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE){
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for large image");
                }
                else{
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for xlarge image");
                }
                displayImageFromExpansionFile();
            } catch (Exception e) {
                e.printStackTrace();
            }           
            break;
        // more cases here
}

По-прежнему кажется, что изображение не отображается в его реальном размере. Когда я рассматриваю изображение внутри файла расширения, я вижу, что оно все еще имеет размер 320x400px. Тем не менее, приложение не отображает изображение в этих размерах.

Что я могу сделать, чтобы приложение отображало изображение в правильных размерах?

Спасибо!

---ОБНОВИТЬ---

Я также попробовал код ниже, без разницы в результатах. Он по-прежнему выглядит примерно в 100x125 пикселей, а не в 320x400 пикселей, как его первоначальный размер.

public void displayImageFromExpansionFile(int bWidth, int bHeight){
    BitmapFactory.Options bfo = new BitmapFactory.Options();
    bfo.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap b = BitmapFactory.decodeStream(fileStream, null, bfo);
    b.setDensity(Bitmap.DENSITY_NONE);
    imageToDisplay.setImageBitmap(b);
}

Единственное, что до сих пор работало Bitmap.createScaledBitmap(b, bWidth, bHeight, true);

На моем телефоне удвоение исходных размеров изображения (до 640x800 пикселей) с использованием вышеуказанного метода приводит к увеличению ожидаемого размера изображения, но я бы предположил, что изображение может отображаться в разных размерах на разных телефонах (возможно, из-за плотности / размера экрана).). Когда я попытался удвоить размеры большого изображения и просмотреть его на своем планшете, изображение оказалось больше, чем должно.

2 ответа

Решение

В конце концов, я возился с файлом макета XML, в котором отображалось сжатое изображение. Я изменил атрибуты imageView так:

  • Ширина / Высота: fill_parent (оба)

  • Тип шкалы: fitCenter

Теперь изображения немного больше, чем я первоначально ожидал, но я думаю, что так это выглядит лучше. И теперь изображения имеют постоянный размер. Задача решена!

Если у кого-то есть проблемы с тем, что я испытываю, надеюсь, это поможет.

Это сработало для меня:

public static Bitmap getBitmapExt(Context context, String name){

    Bitmap bitmap = null;

    try {

        if(expansionFile == null){
            PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, pInfo.versionCode, 0);
        }

        InputStream is = expansionFile.getInputStream("images/" + name + ".png");
        bitmap = BitmapFactory.decodeStream(is);
    }
    catch (Exception e){
        e.printStackTrace();
    }

    return bitmap;
}

https://gist.github.com/uebi-belli/3c07323c8055a3b66ccac0d388b2b013

Надеюсь, что поможет =)

Другие вопросы по тегам