2011-01-20 5 views
6

Я боюсь, что у меня уже есть неудачный ответ на этот вопрос, но на всякий случай ... Я использую SurfaceView для обработки изображений с растровыми изображениями (модификации огней и цветов) и мне нужно будет импортировать измененное растровое изображение (то есть содержимое SurfaceView) в новое растровое изображение, чтобы сохранить его как файл изображения.Android: создание растрового изображения с содержимым SurfaceView

Я смотрю вокруг, и кажется, что можно получить растровое изображение из View.getDrawingCache(), но оно не работает с SurfaceView. Все, что я получаю, это пустая растровая карта.

Есть ли какие-либо решения?

Благодаря

ответ

7

Вы можете нарисовать свой SurfaceView на холсте, который при поддержке растрового изображения?

// be sure to call the createBitmap that returns a mutable Bitmap 
    Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(b); 
    yourSurfaceView.draw(c); 
+0

Я хотел использовать это решение, но это невозможно с SurfaceViews, потому что процесс рисования выполняется в потоке, а холст получается из SurfaceHolder. Он используется следующим образом: canvas = surfaceHolder.lockCanvas (null); синхронизированный (surfaceHolder) {doDraw (холст); } –

+7

Проблема решена. Я изменил SurfaceView на простой пользовательский вид. Затем, при создании чертежа Cache (setDrawingCacheEnabled (true)), когда создается представление, я могу получить растровое изображение, вызывающее метод getDrawingCache(). –

+0

для вашего первого комментария, разве вы не могли бы просто вызвать doDraw с помощью холста, поддерживающего растровые изображения? 'if (screenGrab) {doDraw (c_fromMyPost); } else {doDraw (canvas_fromYourApp); } ' – idbrii

1

There is no simple way to capture frames of SurfaceView, так что вы можете рассмотреть возможность использования TextureView вместо SurfaceView: растровое изображение можно получить с помощью метода textureView.getBitmap().

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