2011-01-20 8 views
6

मुझे पहले से ही इस प्रश्न का दुर्भाग्यपूर्ण उत्तर होने से डर है, लेकिन बस मामले में ... मैं बिटमैप्स (रोशनी और रंग संशोधन) के साथ कुछ छवि प्रसंस्करण करने के लिए एक SurfaceView का उपयोग कर रहा हूं। और मुझे एक नए बिटमैप में संशोधित बिटमैप (यानी SurfaceView की सामग्री) आयात करने की आवश्यकता होगी ताकि मैं इसे एक छवि फ़ाइल के रूप में सहेज सकूं।एंड्रॉइड: 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 से प्राप्त किया जाता है। इसका उपयोग इस तरह किया जाता है: कैनवास = सतह होल्डर.लॉक कैनवास (शून्य); सिंक्रनाइज़ (सतही होल्डर) {डूड्रा (कैनवास); } –

+7

समस्या हल हो गई। मैंने SurfaceView को एक साधारण कस्टम व्यू में बदल दिया। फिर, जब दृश्य बनाया जाता है तो DrawCache (setDrawingCacheEnabled (true)) को सक्षम करते हुए, मैं getDrawingCache() विधि को कॉल करने वाला बिटमैप पुनर्प्राप्त करने में सक्षम हूं। –

+0

आपकी पहली टिप्पणी के लिए, क्या आप बस बिटमैप-समर्थित कैनवास के साथ डूड्रा को कॉल नहीं कर सकते? 'अगर (स्क्रीनग्राब) {doDraw (c_fromMyPost); } else {doDraw (canvas_fromYourApp); } ' – idbrii

1

There is no simple way to capture frames of SurfaceView है, तो आप SurfaceView के बजाय TextureView उपयोग करने पर विचार कर सकते हैं: बिटमैप textureView.getBitmap() पद्धति का उपयोग करके प्राप्त किया जा सकता है।

संबंधित मुद्दे