Вопрос по android, java – Декодировать часть растрового изображения из файла в Android

6

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Ваш Ответ

6   ответов
1

Error: User Rate Limit Exceeded

public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, options);

        final int height = options.outHeight;
        final int width = options.outWidth;
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        int inSampleSize = 1;
        if (height > reqHeight) {
            inSampleSize = Math.round((float) height / (float) reqHeight);
        }
        int expectedWidth = width / inSampleSize;
        if (expectedWidth > reqWidth) {
            inSampleSize = Math.round((float) width / (float) reqWidth);
        }
        options.inSampleSize = inSampleSize;
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(path, options);
    }
4

Error: User Rate Limit ExceededError: User Rate Limit Exceeded.

Error: User Rate Limit Exceeded

import rapid.decoder.BitmapDecoder;

Bitmap bitmap = BitmapDecoder.from("big-image.png")
                             .region(145, 192, 145 + 200, 192 + 400)
                             .decode();
imageView.setImageBitmap(bitmap);

Error: User Rate Limit Exceeded

Вау, это звучит многообещающе. целое декодирование делается на JNI? какие форматы файлов поддерживаются? это даже поддерживает WebP? это включает обнаружение лица?
+1 очень хорошая библиотека, также качество изображения поддерживается на 80% .. и работает практически на всех устройствах
2

Error: User Rate Limit Exceeded

public static Bitmap decodeStream (InputStream is, Rect outPadding, BitmapFactory.Options opts)
@Addev Я действительно интересен ... так что, не думаете ли вы, что перед импортом можно взять только несколько прямоугольников растровых изображений? :)
в каких случаях заполняется outPadding? когда это 9-патч? Есть ли другие случаи? также, даже если это 9-патч, что это значит и что будет заполнено?
OutPadding - это выходной параметр Addev
0

Error: User Rate Limit Exceeded

private Bitmap decodeFile(File f) {
    Bitmap b = null;
    try {
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        FileInputStream fis = new FileInputStream(f);
        b=Bitmap.createBitmap(BitmapFactory.decodeStream(fis, null, o), 100, 200, 200, 400, null, null);
        fis.close();
    } catch (IOException e) {
    }
    return b;
}

Error: User Rate Limit Exceeded

Это выдает ошибку нехватки памяти, потому что BitmapFactory.decodeStream (fis, null, o) не возвращает, пока не будет получено все растровое изображение. Addev
12

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit Exceeded .

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

BitmapRegionDecoder.newInstance(...).decodeRegion(...)
Спасибо, я только что использовал это. Оно работает.
по-видимому, это был бы правильный ответ.
0

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Спасибо за Ваш ответ. То, что я пытаюсь сделать, это реализовать MultiTouchImageView, который предназначен для загрузки только части изображения, видимой из-за масштаба и положения прокрутки, позволяя загружать большие изображения без потери качества и без сбоев памяти. Как я могу это сделать? Addev
Прелесть Android в том, что вы можете посмотреть на исходный код приложений ... В том числе на Android-галерее. Вот ссылкаgithub.com/CyanogenMod/android_packages_apps_Gallery/tree/… Я смотрю на BaseImage.java (в подкаталоге galery) и класс Util.java (в частности, методы makeBitmap ()), и мне кажется, что они выполняют масштабирование ... options.inSampleSize = computeSampleSize (options, minSideLength) , maxNumOfPixels); [...]
Хммм, то, что вы говорите, очень логично, но как Галерея Android загружает эти большие изображения, позволяющие увеличивать изображение с тем же качеством? Addev
В этом случае, на мой взгляд, то, что вы пытаетесь сделать, просто технически невозможно с ограничениями мобильного устройства: вы просто не можете предложить пользователю хороший опыт, не загружая все изображение в память и просто отображая ту часть, которую вы необходимость. Даже если бы вы могли загрузить только часть изображения, вам придется делать это каждый раз, когда пользователь немного панорамирует или увеличивает масштаб ... поскольку операция будет медленной, пользовательский опыт все равно будет дрянным. Единственный способ сделать это - установить верхний предел размера изображения. В противном случае вы просто не сможете это сделать ИМХО.
Этот ответ устарел или просто не прав. Нет проблем с загрузкой субизображения изображения такого размера в Android API уровня 10.

Похожие вопросы