Самый быстрый способ загрузки растрового изображения, повторное использование растрового изображения после его создания - PullRequest
2 голосов
/ 12 марта 2012

У меня есть приложение, в котором я генерирую много растровых объектов. После создания растрового изображения все остальные растровые изображения будут одинакового размера.

В настоящее время я могу загрузить / создать новое растровое изображение примерно за 50-80 мс на моем телефоне, которое работает для того, что мне нужно. Однако из-за быстрых темпов их создания я бью постоянную GC.

Я хотел бы повторно использовать тот же растровый объект, но не уверен, как это сделать через SDK.

Я скомпилировал libjpeg и загрузил свои изображения через NDK и повторно использовал мои растровые изображения, однако моя скорость загрузки упала примерно до 200 мс, что слишком медленно. Я опубликую код позже, когда он будет передо мной.

Вопросы:

Есть ли способ повторно использовать мои растровые объекты, чтобы избежать GC? Есть ли более быстрый способ загрузки моих изображений через NDK? Можно ли подключиться к тому, как ОС загружает растровые изображения? Я знаю о libjpegTurbo, но не могу заставить его скомпилировать в данный момент (другая тема для другого дня).

Любые другие мысли о лучшем способе сделать это.

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Я бы порекомендовал использовать IntBuffer (s), которые содержат данные о пикселях, которые вам нужно поменять. Затем создайте одно растровое изображение нужного вам размера, и когда вам нужно поменять пиксели, используйте bitmap.copyPixelsFromBuffer (). Я предполагаю, что это будет НАМНОГО быстрее, чем выделять / освобождать растровую память каждый раз, когда вам нужно изменить данные пикселей. Было бы неплохо сохранить буферы в хэш-карте, если вы хотите сохранить их в памяти для быстрого поиска.

При желании вы можете использовать setPixels () с массивом int. Хорошая вещь в copyPixelsFromBuffer () заключается в том, что преобразование пикселей не предпринимается, и вариантов меньше, поэтому это может быть немного быстрее.

1 голос
/ 12 марта 2012

Почему бы не использовать хэш-карту для хранения ваших растровых изображений? Затем, когда вы загружаете растровое изображение, проверьте сначала, есть ли оно в хэш-карте, и если это так, вы можете использовать его повторно. Если его нет в хеш-карте, сохраните его как обычно, а затем вставьте в хеш-карту.

...