2014-01-31 4 views
0

Мне нужно знать связь между точками и пикселями и как это влияет на различные устройства с поддержкой BB 7.0 и более поздней версии.Связь между пикселями и точками в blackberry

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

fldwidth = fldwidth*Display.getWidth()/100 
fldheight = fldheight*Display.getHeight()/100 

где первоначально значения fldwidth и fldheight имеют значения pt в десятичной системе.

Я правильно

ответ

1

Точка, по определению, 1/72 дюйма - см Википедия Point_(typography)

Размер пиксела зависит от разрешения экрана на устройстве. Чтобы быть понятным, это разрешение обычно указывается в точках на дюйм (dpi). Это не Общее использование для разрешения термина, которое является высотой и шириной пикселя экрана. Люди используют разрешение таким образом неправильно. Разрешение - это плотность точек на экране, а не количество пикселей на экране.

Дело в том, что между количеством пикселей, отображаемых на экране, нет НИКАКОЙ связи с количеством пикселей, которые необходимы для точки. Вы не можете использовать преобразование, которое вы пытаетесь выполнить.

Чтобы определить количество пикселей, соответствующих 1 точке, вы должны получить разрешение экрана. BB предусматривает два способа для этого:

Display.getHorizontalResolution(); 
Display.getVerticalResolution(); 

К счастью, это даст вам то же значение на всех устройствах BBOS (Java), так как все BBOS устройства имеют одинаковый вертикальное и горизонтальное разрешение.

Приведенное значение представляет собой количество пикселей в одном метре. Итак, все, что вам нужно сделать, это определить, сколько 1/72 дюйма на 1 метр, разделите одно из этих значений на это число, а затем у вас будет количество пикселей в точке.

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

int pixelSizeReqd = pointSizeReq * 
Display.getHorizontalResolution()/pointsInOneMetre; 

И, кстати, просто позвоните Display.getHorizontalResolution() один раз и повторно использовать возвращаемое значение. Я не уверен в getHorizontalResolution(), но я знаю, что некоторые методы отображения, например, getHeight() и getWdith() являются «дорогими», поэтому следует избегать, если это возможно. В любом случае значение не изменится!

Обновление, следующее за этим комментарием: Можете ли вы объяснить в одном примере. Предположим, что я получил (разрешение 320x240) устройство 8520 у меня есть точка (скажем, 57pt), что бы его соответствующее значение пикселя согласно вашей формуле ... ИНТ pixelSizeReqd = pointSizeReq * Display.getHorizontalResolution()/pointsInOneMetre

ответа : Обратите внимание, что 8520 имеет размер экрана 320 x 240. Это не его разрешение экрана для целей этой дискуссии. Понял?

Вы хотите размер 57 пунктов. Таким образом, расчет:

int pixelSizeReqd = 57 * Display.getHorizontalResolution()/pointsInOneMetre; 

Вы не должны заменить Display.getHorizontalResolution() с фигурой - это будет отличаться на разных устройствах и нет необходимости для вас, чтобы попытаться исправить это значение для себя.

Сколько баллов в 1 метре? Вы можете сделать математику, конвертировать 1/72 дюйма в метры, а затем разделить 1 метр на это. Или вы можете ввести в Google «сколько очков в метре» и получить ответ 2,834.64567. Нам не нужна точность, поэтому мы используем только целочисленную арифметику, чтобы дать нам это:

int pixelSizeReqd = 57 * Display.getHorizontalResolution()/2834; 

работы - это не было слишком трудно было?

+0

Можете ли вы объяснить в примере. Предположим, что у меня есть устройство 8520 (разрешение 320x240), у меня есть точка (скажем, 57pt), каково будет ее соответствующее значение пикселя в соответствии с вашей формулой ... int pixelSizeReqd = pointSizeReq * Display.getHorizontalResolution()/pointsInOneMetre; – Yatin

+0

8520 НЕ имеет разрешение экрана 320 x 240, то есть его размер экрана. См. Обновление выше. –