Как конвертировать ppi в dpi для изображений Android?
Я начал делать графику для своего приложения для Android с помощью Adobe Photoshop. Но я не могу продолжить, так как разрешение в Photoshop задано в пикселях на дюйм, где, как говорится в официальной документации Google, Android потребует изображения, установленные в dpi. Я искал в Интернете для преобразования между ними, но никогда не получал никакой правильной формулы.
Я знаю, что документация на Android описывает отношение как px = dp*dpi/160
. Но моя проблема в том, что если я знаю dpi, где я получу значение dp, которое будет использоваться в этом расчете? Или существует ли какое-либо предположение о значении dp? Я смущен.
Ответы
Ответ 1
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.5px
- Горизонтальный = 320 * 120/160 = 240px
- MDPI
- Вертикальный = 470 * 160/160 = 470 пикселей
- Горизонтальный = 320 * 160/160 = 320 пикселей
- ИПЧР
- Вертикальный = 640 * 240/160 = 960px
- Горизонтальный = 480 * 240/160 = 720px
Изменить - добавление xhdpi, поскольку они становятся все более популярными
- xhdpi
- Вертикальный = 960 * 320/160 = 1920 пикселей
- Горизонтальное = 720 * 320/160 = 1440px
Эти значения должны быть пригодны для большинства экранов xhdpi, таких как телевизоры и Nexus 4, включая Nexus 10 (при условии, что они не создают новую категорию для этого, так как это 25k x 16k, не знаю, как я haven пока у меня нет руки).
/Edit
Если вы используете эти размеры, ваши изображения будут отлично смотреться на любом экране. Обязательно определите размеры в коде в dp, однако Android будет обрабатывать преобразование, описанное выше, самостоятельно.
Ответ 2
Я не согласен с ответом Майкла Аллена, потому что результирующие разрешения для 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
hdpi
117,5 * 6 = 705
80 * 6 = 480
xhdpi
117,5 * 8 = 940
80 * 8 = 640
Эти размеры теперь находятся в идеальном соотношении масштабирования 3: 4: 6: 8.
Ответ 3
Да, Dp (независимые пиксели плотности) - все, о чем будет заботиться Photoshop. Он не должен учитывать, какова будет плотность пикселей. Этот образ супер большого количества пикселей может быть помещен в супер маленькую кнопку пользовательского интерфейса высокой четкости для всего, что ей нужно. Или у вас может быть несколько пикселей для ретро-плаката A0 Tetris. Это потому, что они могут масштабироваться. Мало пикселей масштабируется для большой площади, и многие пиксели уменьшаются для небольшой области на экране.
Таким образом, выберите размер вашей целевой размера экрана и используйте его в Photoshop. (также проверьте, кто использует то, что... круговая диаграмма используемых размеров)
Для интуиции этот сайт помог мне ссылку на страницу блога:
Во время выполнения платформа прозрачно обрабатывает любое масштабирование необходимых единиц dp, исходя из фактической плотности используемого экрана.
(платформа делает масштабирование - обработка отношения плотности выполняется Android, а не вы), и это очень важно для пользовательского интерфейса:
Использование модулей dp для определения пользовательских интерфейсов приложений настоятельно рекомендуется в качестве способа обеспечения правильного отображения вашего пользовательского интерфейса на разных экранах.
Потому что вы хотите, чтобы элементы пользовательского интерфейса отображались одинаково на всех устройствах, поэтому он будет делать масштабирование в зависимости от количества пикселей, которое он вычисляет в этой формуле. И если dp масштабируется таким образом, чтобы он стал слишком запасным или плотным, хорошо, что не будет выглядеть хорошо.
Ответ 4
Так как разрешение в Photoshop задано в пикселях на дюйм, где, как говорится в официальной документации Google, Android потребует установки изображений в формате dpi.
Ответ 5
То же самое на всех устройствах, поэтому он будет делать масштабирование в зависимости от количества пикселей, которые он вычисляет в этой формуле.