Как конвертировать ppi в dpi для изображений Android?

Я начал делать графику для своего приложения для Android с помощью Adobe Photoshop. Но я не могу продолжить, так как разрешение в Photoshop задано в пикселях на дюйм, где, как говорится в официальной документации Google, Android потребует изображения, установленные в dpi. Я искал в Интернете конверсию между ними, но никогда не получал никакой правильной формулы.

Я знаю, что документация на Android описывает отношение как px = dp*dpi/160 . Но моя проблема в том, что если я знаю dpi, где я получу значение dp, которое будет использоваться в этом расчете? Или существует ли какое-либо предположение о значении dp? Я запутался.

Dp – независимые пиксели плотности и используются для обобщения количества пикселей на экране. Это обобщенные данные, взятые из http://developer.android.com/guide/practices/screens_support.html

  • xlarge экраны не менее 960dp x 720dp
  • большие экраны не менее 640dp x 480dp
  • нормальные экраны не менее 470dp x 320dp
  • маленькие экраны составляют не менее 426dp x 320dp

Обобщенные значения Dpi для экранов:

  • ldpi Ресурсы для экранов с низкой плотностью (ldpi) (~ 120 точек на дюйм)
  • mdpi Ресурсы для экранов средней плотности (mdpi) (~ 160 точек на дюйм). (Это базовая плотность.)
  • hdpi Ресурсы для экранов высокой плотности (hdpi) (~ 240 точек на дюйм).
  • xhdpi Ресурсы для экранов с высокой плотностью (xhdpi) (~ 320 точек на дюйм).

Поэтому обобщенный размер ваших ресурсов (если они полны):

  • ldpi
    • Вертикальный = 426 * 120/160 = 319,5 пикселей
    • Горизонтальный = 320 * 120/160 = 240 пикселей
  • MDPI
    • Вертикальный = 470 * 160/160 = 470 пикселей
    • Горизонтальный = 320 * 160/160 = 320 пикселей
  • ИПЧР
    • Вертикальный = 640 * 240/160 = 960 пикселей
    • Горизонтальный = 480 * 240/160 = 720 пикселей

Изменить – добавление xhdpi, поскольку они становятся все более популярными

  • xhdpi
    • Вертикальный = 960 * 320/160 = 1920 пикселей
    • Горизонтальное = 720 * 320/160 = 1440px

Эти значения должны быть подходящими для большинства экранов xhdpi, таких как телевизоры и Nexus 4, включая Nexus 10 (при условии, что они не создают новую категорию для этого, так как это 25k x 16k, не знаю, поскольку у меня нет руки на один еще).

/Редактировать


Если вы используете эти размеры, ваши изображения будут отлично смотреться на любом экране. Обязательно определите размеры в коде в dp, однако Android будет обрабатывать описанное выше преобразование самостоятельно.

Я не согласен с ответом Майкла Аллена, потому что результирующие разрешения для ldpi, mdpi, hdpi и xdpi не удовлетворяют коэффициентам масштабирования 3: 4: 6: 8 для альтернативных растровых изображений, упомянутых в документах google здесь в разделе «Альтернативные чертежи»,

http://developer.android.com/guide/practices/screens_support.html#testing

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

470 x 320 dp теперь, используя формулу из той же документации, мы вычисляем полное разрешение экрана для базового размера экрана

px = dp * (dpi / 160); для базовой линии px = dp * (160/160) = dp * 1, так что px = dp. Это означает полный размер экрана для нашей базовой конфигурации. в пикселях

470 X 320 px (mdpi)

теперь, чтобы следить за коэффициентами масштабирования 3: 4: 6: 8 для альтернативных размеров drawables для ldpi, hdpi и xhdpi, нам нужно получить значения единицы из mdpi. т.е.

470/4 = 117,5

320/4 = 80

разделите на 4, поскольку коэффициент масштабирования для mdpi равен 4, коэффициенты масштабирования для ldpi, hdpi и xhdpi равны 3,6 и 8 соответственно. теперь просто умножьте результаты блока 117.5 и 80 с этими коэффициентами масштабирования

ldpi

117,5 * 3 = 352,5

80 * 3 = 240

MDPI

117,5 * 4 = 470

80 * 4 = 320

ИПЧР

117,5 * 6 = 705

80 * 6 = 480

xhdpi

117,5 * 8 = 940

80 * 8 = 640

Эти размеры теперь находятся в идеальном соотношении масштабирования 3: 4: 6: 8.

Да, Dp ( независимые пиксели плотности) – все, о чем будет заботиться Photoshop. Он не должен учитывать, какова будет плотность пикселей. Этот образ супер большого количества пикселей может быть помещен в супер маленькую кнопку пользовательского интерфейса высокой четкости для всего, что ей нужно. Или у вас может быть несколько пикселей для ретро-плаката A0 Tetris. Это потому, что они могут масштабироваться. Мало пикселей увеличено для большой площади, и многие пиксели уменьшены для небольшой области на экране.

Таким образом, выберите целевую ссылку на размер экрана размера и используйте его в Photoshop. (также проверьте, кто использует то, что … круговая диаграмма используемых размеров )

Для интуиции этот сайт помог мне связать страницу блога :

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

(платформа делает масштабирование – обработка отношения плотности выполняется Android, а не вы), и это очень важно для пользовательского интерфейса:

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

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

Поскольку разрешение в Photoshop задано в пикселях на дюйм, где, как говорится в официальной документации Google, Android потребует изображения, установленные в dpi.

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

Interesting Posts

Прочитать файл назад?

Определите, когда ViewPager меняет страницы

Получать текстовое содержимое со страницы mediawiki через API

Я хотел бы установить мои переменные в верхней части моего classа, а не в методе

Установите ApartmentState на задание

Запустите cmd.exe в режиме администратора без explorer.exe

Intellisense не работает для JavaScript в Visual Studio 2012

API речевой речи Google

Сколько накладных расходов на интеллектуальные указатели по сравнению с обычными указателями на C ++?

Выделение синтаксиса RichTextBox в режиме реального времени – отключение перерисовки

Java 256-битное шифрование на основе AES на основе паролей

Является ли HTTP-заголовком Referer отправленным при переходе на страницу http с https-страницы?

Android HTML.fromHTML () с изображениями?

Теперь, когда у нас есть std :: array, какие применения остаются для массивов в стиле C?

VirtualBox: как я могу добавить (смонтировать) файл образа ISO из командной строки?

Давайте будем гением компьютера.