Я немного исследовал MIP-карту, чтобы узнать о ней больше. Однако в итоге я запутался еще больше.

В этом сообщении: Mipmaps и доступные папки

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

Следовательно, у меня возникла идея, что с более крупными иконками mipmap будет использовать более высокую плотность (масштабирование).

Но затем в этом сообщении: Рисунки Mipmap для значков

Однако некоторые программы запуска (поставляемые с некоторыми устройствами или доступные в Play Store) используют значки большего размера, чем стандартные 48dp. Программы запуска используют getDrawableForDensity и при необходимости уменьшают масштаб, а не увеличивают, поэтому значки высокого качества. Например, на планшете с hdpi программа запуска может загружать значок xhdpi.

Я пришел к выводу, что для значков большего размера mipmap будет уменьшать масштаб значков, чтобы обеспечить более высокое качество.

И, наконец, в этом посте: Рисунки Mipmap для значков от @Sergej:

Что сделает Android, так это то, что он попытается забрать изображение из корзины с более высокой плотностью вместо того, чтобы увеличивать его. Это повысит резкость (качество) изображения.

Mipmap будет использовать более высокую плотность вместо увеличения для значков большего размера.

Что на самом деле происходит? Спасибо.

< sizesUpdate: Кроме того, во втором посте чертежи Mipmap для иконок от @Kazuaki, я этого не понимаю

В разных приложениях запуска главного экрана на разных устройствах отображаются значки запуска приложений с разным разрешением. Когда методы оптимизации ресурсов приложения удаляют ресурсы из-за неиспользуемой плотности экрана, значки запуска могут выглядеть нечеткими, потому что приложение запуска должно масштабировать значок с более низким разрешением для отображения. Чтобы избежать этих проблем с отображением, приложения должны использовать папки mipmap / resource для значков запуска. Система Android сохраняет эти ресурсы независимо от разборки плотности и гарантирует, что приложения запуска могут выбирать значки с наилучшим разрешением для отображения.

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

Как это работает? Спасибо.

1
CodingChap 20 Май 2021 в 00:51

2 ответа

Лучший ответ

Я думаю, что ваше замешательство по поводу цитаты @Kazuaki - это теперь удаленная документация, замененная на: https: / /developer.android.com/training/multiscreen/screendensities#mipmap

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

Например, если сегмент плотности устройства равен xxhdpi, а самый большой значок приложения, который вы предоставляете, находится в формате drawable-xxhdpi, приложение запуска масштабирует этот значок, что делает его менее четким. Таким образом, вы должны предоставить значок запуска с еще большей плотностью в каталоге mipmap-xxxhdpi. Теперь программа запуска может вместо этого использовать ресурс xxxhdpi.

В каталогах mipmap указано, что «не удаляйте при попытке сделать APK меньшего размера».

1
Morrison Chang 20 Май 2021 в 02:45

В моем понимании MIP-отображение в основном предназначено для уменьшения масштаба.

В OpenGL вы можете установить режимы фильтрации текстур. Один для уменьшения (минимизации), другой для увеличения (увеличения) (см. Введение в фильтрацию текстур ).

Уменьшение (GL_TEXTURE_MIN_FILTER):

  • GL_NEAREST
  • GL_LINEAR
  • GL_NEAREST_MIPMAP_NEAREST
  • GL_NEAREST_MIPMAP_LINEAR
  • GL_LINEAR_MIPMAP_NEAREST
  • GL_LINEAR_MIPMAP_LINEAR

Увеличение масштаба (GL_TEXTURE_MAG_FILTER):

  • GL_NEAREST
  • GL_LINEAR

Вы заметили, что у MIP-карты нет параметров для увеличения, но они предназначены для уменьшения.

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

0
hata 20 Май 2021 в 00:25