Записать растровое изображение в файл в чанках android - PullRequest
2 голосов
/ 21 декабря 2011

Этот вопрос относится к моему предыдущему вопросу , но вам не нужно читать его, чтобы понять.

Теперь я пытался преобразовать растровое изображение в меньшие части, а затем сохранить эти меньшие части.

Проблема, которую я получаю: В файле сохраняется только первая часть, размер которой намного больше, чем полное изображение. Ниже код, который я использую:

for (int i = 0; i < Image.getHeight(); i++)
{
    fout = new FileOutputStream(file, true);
    Bitmap temp = Bitmap.createBitmap(Image, 0, i,Image.getWidth(), 1);
    temp.compress(Bitmap.CompressFormat.PNG, 100, fout);
    fout.flush();
    fout.close();
}

Код довольно прост, но я не понимаю, почему в файл записывается только первая строка.

UPDATE :: Мерлин и Дипак правы. Теперь я попытался дать разные имена, и все части были успешно записаны в разные файлы. Теперь вы знаете проблему, я должен пойти для удаления заголовка из второго блока и удаления eof из первого блока или что?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2011

Я собираюсь сопротивляться желанию спросить, почему, черт возьми, вы делаете это, поскольку это крайне неэффективно, так что давайте посмотрим.

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

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

Это эквивалентно наличию маркера EOF в текстовом файле. Все строки пишутся, но при чтении читатель сдается после первого EOF

Вам необходимо изучить структуру файла PNG , чтобы более полно понять, что происходит

1 голос
/ 21 декабря 2011

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

1 голос
/ 21 декабря 2011

Поскольку вы добавляете сжатые файлы (.png) один за другим, при открытии результирующего файла просто отобразятся первые битовые закодированные данные, которые являются вашей первой строкой. Это также логично, так как заголовок закодированного изображения имеет количество байтов, составляющих закодированный контент, и декодеры не будут беспокоиться об остальных данных в файле после маркера конца.

Я только что попытался скопировать файл .png в конец другого, когда я открывал файл, я увидел неизмененное первое изображение!

...