2013-12-01 2 views
0
Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + 
     "/images/make_machine_example.jpg");  
int[] pixels = new int[bm.getWidth()*bm.getHeight()];   
_i.setImageBitmap(bm); 

Кажется, я получаю ошибку при объявлении массива пикселей.java.lang.OutOfMemoryError в Android при объявлении массива

+0

Каковы размеры JPEG? Они огромны? Как вы тестируете? На устройстве или с эмулятором? Если последнее, вы предоставили виртуальному устройству много ОЗУ? –

+0

Я использую Android-устройство. Я посмотрел изображение и его около 800 кб и около 1900x2600 пикселей. – user3054392

+0

Изменить размер изображения, затем перейти к многомерному массиву в вашем случае int [] [] pixels = new int [bm.getWidth()] [bm.getHeight()]; –

ответ

0

Возможно, ширина вашего растрового изображения и/или высота слишком велики. Попробуйте масштабировать растровое изображение до тех пор, пока исключение не исчезнет. Использовать Bitmap.createScaledBitmap()

+0

Я пробовал ваше решение, и оно сработало. Но масштабирует ли растровое изображение изображение? – user3054392

+0

Вы делаете растровое изображение меньше, поэтому качество не должно уменьшаться. Однако для достижения лучших результатов убедитесь, что фильтр установлен в значение true. –

0

Масштаб вашего растрового изображения на размер дисплея телефона, я думаю, оригинальное изображение будет большим, поэтому вы получите OutOfMemoryException.

Bitmap.createScaledBitmap() будет вашим другом.

+0

createScaledBitmap работал, но есть ли способ сохранить пиксели? Мне нужно обработать изображение, и я боюсь, что это приведет к меньшей точности. – user3054392

+0

Посмотрите на http://developer.android.com/training/displaying-bitmaps/process-bitmap.html, там объясняется, как вы обрабатываете изображение из потока пользовательского интерфейса, поэтому основной поток приложения не останавливается и дождитесь завершения обработки изображений. – Patrick

Смежные вопросы