Можно ли записывать растровые изображения в кэш с помощью ObjectOutputStream? - PullRequest
0 голосов
/ 27 марта 2011

У меня есть метод loadFromCache, и он возвращает растровое изображение, если оно найдено в кеше. Короче говоря, я сузил его до этого метода, возвращая ноль в конце, если попытка / уловка не удалась.

FileInputStream fis = new FileInputStream(getCacheDir()+(""+position));
        ObjectInputStream ois = new ObjectInputStream(fis);
        Bitmap temp = (Bitmap)ois.readObject();
        fis.close();
        return temp;

Ранее я пытался использовать методы Bitmap.compress (...) для сохранения растровых изображений, но они были немного медленными для моих нужд ... Да, растровое изображение было записано в эти позиции, но я не знаю, если оно (Растровое изображение) является сериализуемым, так что это на самом деле сохранение? И да, я вспомнил, чтобы очистить, когда я написал файл.

Ответы [ 2 ]

0 голосов
/ 06 июля 2013

Обмен опытом, который я только что получил, с Bitmap.compress очень медленным:

Мое исходное изображение было в формате JPEG, и я передавал Bitmap.CompressFormat.PNG в bitmap.compress. Это привело к тому, что операция сжатия заняла 10-15 секунд.

Как только я изменил его на JPEG (чтобы исходный и целевой файлы оставались в одном и том же формате изображения), операция заняла менее секунды. Возможно, первоначальный вопрос возник с помощью аналогичных средств, и, возможно, кто-то еще считает это полезным.

0 голосов
/ 27 марта 2011

Как Bitmap.compress() слишком медленно для вас?Единственный более быстрый (?) Способ - записать растровое изображение без изменений на диск, см. Ниже.

Использование MappedByteBuffer вместе с Bitmap.copyPixelsToBuffer() может работать.Я не проверял это, но похоже, что это может сработать.Обратите внимание, что вам, скорее всего, придется самостоятельно сохранять размеры изображения.

...