Как мне преобразовать ppi в dpi для изображений Android? - PullRequest
25 голосов
/ 03 августа 2011

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

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

Ответы [ 5 ]

36 голосов
/ 04 августа 2011

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

  • x для больших экранов не менее 960dp x 720dp
  • для больших экранов не менее 640dp x 480dp
  • нормальные экраны вминимум 470dp x 320dp
  • для маленьких экранов не менее 426dp x 320dp

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

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

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

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

Редактировать - добавление xhdpi по мере их популярности

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

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

/ Edit


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

5 голосов
/ 11 января 2013

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

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 для альтернативных размеров рисования для ldpi, hdpi и xhdpi, которые мы должны получитьЕдиницы измерения от МДПИ.то есть

470/4 = 117,5

320/4 = 80

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

ldpi

117,5 * 3 = 352,5

80 * 3 = 240

мдпи

117,5 * 4 = 470

80 * 4 = 320

HDI

117,5 * 6 = 705

80 * 6 = 480

xhdpi

117,5 * 8 = 940

80 * 8 = 640

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

1 голос
/ 10 апреля 2012

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

1 голос
/ 18 февраля 2012

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

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

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

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

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

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

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

0 голосов
/ 09 апреля 2012

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

...