Как получить доступ к пикселям растрового изображения на Android? - PullRequest
2 голосов
/ 20 ноября 2010

Короче говоря, я не могу получить доступ ко всем пикселям растрового изображения.

Я использовал намерение запустить собственное приложение «Камера» и вернул растровое изображение в активность моего приложения. Данные, безусловно, являются растровыми объектами, и я могу отображать, получать высоту / ширину и т. Д. И получать доступ к некоторым пикселям с помощью getPixel (). Однако, когда я использую значения getHeight () и getWidth (), я получаю ошибку ошибки массива. По следам и ошибкам я обнаружил, что могу получить доступ только к уменьшенному количеству пикселей изображения, например, с одним изображением, которое возвратило значение высоты и ширины 420,380, я также могу получить доступ к 200,100. Затем я выполняю некоторую обработку изображения и использую setPixel () для исходного изображения. Когда я показываю изображение, оно показывает, скажем, 200 100, обрабатывающие пиксели и остальные нормальные, поэтому пиксели, очевидно, есть и доступны для Android, но не для меня. Я должен поговорить с другими людьми, которые также имели эту проблему с изображениями.

Кто-нибудь знает что-нибудь еще об этом, причины? или работа вокруг?

Большое спасибо заранее.

Кажется, что нет никакого пути к этому, кто-нибудь думает, что было бы лучше / возможно получить доступ к изображению непосредственно в памяти, возможно, используя NDK?

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Получил ответ от Альберта Пуччиани на форумах Android. Теперь я создаю int buffer и копирую пиксели в него, затем использую get() и put() для извлечения пикселей. Также гораздо быстрее использовать get() и put() вместо get/setPixel() из класса Bitmap. Теперь нужно проверить, возвращает ли это все пиксели в буфер для всех изображений.

После дополнительного тестирования я обнаружил, что это просто проблема с памятью, поскольку объем, выделяемый для каждого процесса, включает все битовые карты.

1 голос
/ 20 ноября 2010

Вы не сможете получить доступ к пикселю в (getWidth (), getHeight ()) на любом изображении, потому что, как и все остальное, они имеют индекс 0. Допустимый диапазон пикселей: (от 0 до getWidth () - 1, от 0 до getHeight () - 1), и поэтому самый нижний правый пиксель получается с помощью b.getPixel (b.getWidth () - 1, b.getHeight () - 1).

...