Как преобразовать 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) (~ 120dpi)
    • 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, а не вы), и это очень важно для пользовательского интерфейса:

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

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

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

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

    Intereting Posts
    Как добавить динамический вид в элемент ListView во время выполнения? Установка ширины представления программы Как создать круговую кнопку в андроиде с изображением в фоновом режиме? Внедрение Javascript-моста в WebView Android – JSONException Нет значения для «Кордоба-платформа add android» терпит неудачу с неожиданной ошибкой Регулярное выражение для удаления всех непечатаемых символов Используйте alarmManager и службу для выполнения уведомления о расписании только в течение определенного периода времени VU (аудио) при записи звука в Android Android-панель навигации всегда создает новые действия AsyncTask всегда будет работать, даже если приложение будет уничтожено? Изменение позиции меню панели действий в Android Исправить соотношение сторон приложения и камеры Android Кнопка переключения пароля в TextInputEditText исчезает после щелчка в Support Library 25.1.0 Кнопка не меняет значение текстового вида