canvas.setBitmap (bitmap) работает в эмуляторе, но не на телефоне - PullRequest
2 голосов
/ 27 марта 2012

Я хочу написать приложение для доски. У меня есть начало, которое отображает растровое изображение (страницу чертежа), а затем копирует это растровое изображение в SurfaceView. Он прекрасно работает в эмуляторе, но когда я запускаю его на своем Samsung Galaxy Ace, он неожиданно закрывается. Этот код:

public void surfaceCreated(SurfaceHolder holder) {
Log.d(TAG, "Create surface");           
mo_paper = BitmapFactory.decodeResource(getResources(), R.drawable.paper);
Log.d(TAG, "Created paper");            
mo_easel = new Canvas();    
Log.d(TAG, "Created easel");            
mo_easel.setBitmap(mo_paper);
Log.d(TAG, "Set easel");            
mo_matrix = new Matrix();
Log.d(TAG, "Assets loaded");            
mainThread.setRunning(true);
mainThread.start();
Log.d(TAG, "Threads started");          
}

выводит «Созданный мольберт», но не «Задать мольберт», поэтому кажется, что метод .setBitmap () вызывает ошибку.

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Ромэн Гай был прав. На телефоне растровое изображение загружалось как неизменяемое, но в эмуляторе и на другом телефоне оно загружалось как изменяемое (вопреки документации!). Установка опции inMutable невозможна в API до 11, поэтому в моем случае простым решением было создать пустое растровое изображение с

    mo_paper = Bitmap.createBitmap(paperWidth, paperHeight, Bitmap.Config.ARGB_8888);   

и просто нарисуйте любые другие растровые изображения, которые я хочу

0 голосов
/ 27 марта 2012

Растровые изображения, загруженные из ресурсов, являются неизменяемыми.Вам нужно передать BitmapFactory.Options, который сообщает BitmapFactory, что вы хотите, чтобы результирующее растровое изображение было неизменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...