Как отобразить растровое изображение в Android - PullRequest
10 голосов
/ 08 февраля 2011

Я делаю приложение, в котором я получаю изображения Mjpg с Live IP Camera в Android.

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

Я использую следующий код для отображения изображения:

ImageView imageView = (ImageView) findViewById(R.id.imageView1);
Bitmap bmp = BitmapFactory.decodeByteArray(buffer, start, a);
imageView.setImageBitmap(bmp);

но я получаю исключение

android.view.ViewRoot CallFromWrongThreadException

Пожалуйста, объясните, как отображать bytearray на макете Android.

Ответы [ 4 ]

10 голосов
/ 08 июня 2011
ImageView tv1;
tv1= (ImageView) findViewById(R.id.image);
InputStream si1 = asset.open("image/" + cat_arr1[i] + ".png");
Bitmap bitmap1 = BitmapFactory.decodeStream(si1);
tv1.setImageBitmap(bitmap1);
3 голосов
/ 08 февраля 2011

Вы должны использовать runOnUiThread () для обновления представлений из других потоков.

1 голос
/ 08 февраля 2011

Исключение CallFromWrongThreadException означает, что вы пытались обновить пользовательский интерфейс из потока, который не является потоком пользовательского интерфейса и который не разрешен.

Так что ваша проблема не в том, что ваш код для создания изображения неправильный, а в том, что вы делаете это не в том месте. Если вы, например, выбирает изображение в фоновом режиме в AsyncTask, вам нужно setImageBitMap() в postExecute(), а не в doInBackground().

Не увидев больше кода, мы не сможем вам больше помочь.

1 голос
/ 08 февраля 2011

Когда вы выполняете какую-либо работу, связанную с просмотром, всегда делайте это из потока графического интерфейса, т.е. the thread that created the view hierarchy.

Так что используйте Handlers для достижения этой цели.

...