Я использую подпрограмму для получения цвета пикселя (эта: http://www.markj.net/iphone-uiimage-pixel-color/) и сталкиваюсь с частыми сбоями приложения при его использовании.Соответствующая часть кода:
unsigned char* data = CGBitmapContextGetData (cgctx);
if (data != NULL) {
int offset = (some calculations here);
int alpha = data[offset]; // <<<< crashes here
}
Этот код связан для запуска на элементах touchesBegan, touchesEnded и touchesMoved.Похоже, что сбои происходят только во время событий touchesEnded и touchesMoved, особенно когда я запускаю касание на целевом изображении, но в процессе перемещаю его за границы изображения.
Есть ли способ проверить, какой размер данных в массиве указан объектом data
?Что может быть не так?
Редактировать : Расчет смещения:
int offset = 4*((w*round(point.y)*x)+round(point.x)*x);
Где point
- точка, где происходит касание, w
- ширина изображения, x
- это масштаб изображения (для изображений высокого разрешения на дисплеях сетчатки).
Я тоже не вижу ничего плохого в cgctx
.По сути, я запускаю код по приведенной выше ссылке почти без изменений, конкретный фрагмент кода, с которым у меня возникают проблемы, находится в функции (UIColor*) getPixelColorAtLocation:(CGPoint)point
, поэтому, если вы хотите получить подробную информацию о том, что делает код, просто прочитайте исходный код.
Редактировать: другое дело, что это никогда не происходит в симуляторе, но часто происходит при тестировании на устройстве.
Редактировать: В идеале я бы хотел сделать ничего , если палецв настоящее время не над изображением, но есть проблемы с выяснением, когда это произойдет.Похоже, что соответствующие методы в SDK показывают только то, в каком виде возникло касание, а не где оно сейчас.Как я могу это выяснить?