Некоторые аппараты со временем начинают неверно отрабатывать координату точки нажатия стилусом. С чем это связанно? Мне трудно ответить, может и банальная деформация... кто занет? На одной машинке мне пришлось лично повозиться и привести сие недоразумение до весьма приемлемого результата.
Нам понадобятся:
Проводим калибровку экрана в настройках системы. Хотя этот шаг можно опустить и использовать те значения реестра, которые уже имеем.
Далее идем в реестр за координатами. Они хранятся в ветке: [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] в переменной
"CalibrationData"="1800,2054 1009,3152 775,958 3400,922 3089,3181 "
Вот мои замеры для разных систем:
Последние координаты и есть значения для "больной" машинки. Ими и займемся! Значения в реестре расположены парами (горизонталь-вертикаль) в том же порядке, как и ввод нажатий стилусом.
Координаты нажатий разделены пробелом.
И так, имеем:
Легко сообразить, что в моем случае координата (0,0) - левый нижний угол экрана. Теперь проведем несложные вычисления и подсчитаем реальный размер.
Имею на данный момент следующие размеры:
где:
Далее ищем коэфициенты соотношения размера в точках к размерам в пикселах и миллиметрах: для графики:
3796/240=15.8 (горизонталь) 4108/320=12.8 (вертикаль)
Итого:
hpx = 15.8 (pt/pxl) vpx = 12.8 (pt/pxl)
Аналогично для физических размеров:
hpm= 71.6 (pt/mm) vpm= 57.9 (pt/mm)
Значения привел дробные, но лучше округлить в любую сторону.
Почему я использовал коэффициенты для разных типов данных и pt/pxl, и pt/mm, а не один какой-то? Потому что в одних ситуациях удобно вычислять отклонения по пикселам, а в других банально измерять линейкой или на глаз!
Следующий этап - вычисление отклонений. В машинке, которую мне дали для калибровки были следующие отклонения:
LU - около 8 мм по горизонтали вправо RL - около 3 мм по горизонтали влево
Отклонения я замерял при помощи DigitizerCheck, проводя замеры от точки касания до перекрестия на экране. Касания производил приблизительно в тех местах где расположены кресты системной калибровки. Так же при нажатии на краях (там где координата должна быть равна 0 или 239 для гор, и 0 и 319 для верт) снимал показания отклонения в пикселах для более тонкой рекалибровки. Т.е. Тапнул в точку с координатой X=0, а DigitizerCheck показал (21,222) - отклонение 21 pxl
При отклонении координаты, нам при коррекции надо двигаться в туже сторону, а именно если координата отличается в "плюс" (больше), то коррекцию надо прибавлять, если в "минус" (меньше), то вычитать.
Таким образом для своего случая я имею:
C = 1898,2054 (центр) LU = 609 + 8*71.6,3152 (лев-верх) LL = 775,958 (лев-низ) RL = 3367 - 3*57.9,922 (прав-низ) RU = 3089,3181 (прав-вверх)
Округлив до целых:
"CalibrationData"="1898,2054 1158,3152 775,958 3193,922 3089,3181 "
Заношу эти данные в реестр, делаю софт-ресет. После перезагрузки, изменяя на глаз значения, добиваюсь наиболее близкого к совершенству результата. Далее делаю экспорт из реестра ветки [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] в отдельный файл. он может понадобиться после холодных перезапусков, чтобы не проводить все эти манипуляции. Вроде бы все? Может есть какие-то другие методы, но пока ничего другого не пришло в голову.