2011-01-20 8 views
6

Obawiam się, że mam już niefortunną odpowiedź na to pytanie, ale na wszelki wypadek ... Używam SurfaceView do przetwarzania obrazu z bitmapami (modyfikacje świateł i kolorów) i musiałbym zaimportować zmodyfikowaną bitmapę (tj. zawartość SurfaceView) w nowej bitmapie, aby móc ją zapisać jako plik obrazu.Android: tworzenie mapy bitowej z zawartością SurfaceView

Rozglądałem się i wydaje mi się, że możliwe jest uzyskanie bitmapy z View.getDrawingCache(), ale nie działa ona z SurfaceView. Dostaję tylko pustą bitmapę.

Czy istnieje rozwiązanie tego problemu?

Dzięki

Odpowiedz

7

można wyciągnąć SurfaceView na płótnie, który jest wspierany przez Bitmap?

// 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

Chciałem użyć tego rozwiązania, ale nie jest to możliwe w SurfaceViews, ponieważ proces rysowania odbywa się w wątku, a płótno jest uzyskiwane z SurfaceHolder. Jest używany w następujący sposób: canvas = surfaceHolder.lockCanvas (null); zsynchronizowany (surfaceHolder) {doDraw (canvas); } –

+7

Problem rozwiązany. Zmieniłem SurfaceView na prosty niestandardowy widok. Następnie włączając drawingCache (setDrawingCacheEnabled (true)) podczas tworzenia widoku, jestem w stanie pobrać bitmapę wywołującą metodę getDrawingCache(). –

+0

dla twojego pierwszego komentarza, czy nie możesz po prostu wywołać doDraw z płótnem opartym na bitmapie? 'if (screenGrab) {doDraw (c_fromMyPost); } else {doDraw (canvas_fromYourApp); } ' – idbrii