четверг, 27 октября 2011 г.

Специфика работы createBitmap в HTC Sense

Оболочка HTC Sense для Android сматртфонов меняет базовый интрфейс устройства наиболее радикальным образом. При этом изменения происходит не только на внешнем "пользовательском" уровне, но и в глубине ОС Android, что приходится учитывать при программировании. Самая неприятная "особенность" с которой я успел столкнуться относиться к работе базового метода Bitmap.createBitmap. К примеру, вот стандартный код:
// ...
int finalX = 10;
int finalY = 20;
int finalWidth = 100;
int finalHeight = 120;
Bitmap finalBitmap = Bitmap.createBitmap(originalImage, finalX, finalY,
  finalWidth, finalHeight);
Мы из изображения, хранящегося в originalImage и, к примеру, имеющего размеры 200x300 пикселей, копируем часть размером 100x120 в новый битмап finalBitmap со смещением 10 пикселей по X и 20 пикселей по Y. Это полностью нормальный и рабочий код. Но, стоит изменить значение переменной finalY c "20" на "0", как на устройствах с HTC Sense этот код начнет выдавать совершенно неожиданные результаты: при копировании значение finalHeight будет игнорироваться и метод будет использовать полную высоту изображения, отмасштабировав ее в нужную нам высоту (300 будет сжато до 120 в приведенном примере). При этом для координаты X все значения работают корректно - ошибка касается только Y координаты. Ошибка не очень серьезная, но знать о ней и учитывать необходимо. Разрабатываемое приложение позволяло использовать быстрое решение: замена значения finalY с"0" на "1", а вот для тех случаев, когда верхний пиксель критично важен придется уже писать собственную функцию копирования.

Комментариев нет:

Отправить комментарий