2011-12-16 12 views
12

में काला है, मैं निम्नलिखित कोड का उपयोग कर रहा हूं। छवि सहेजी गई है लेकिन यह काला है।
कृपया मेरा कोड देखें और मुझे बताएं कि मैं कहां गलत कर रहा हूं।
मैं मेनू में इस कोड का उपयोग कर रहा हूँ।COCOS 2D स्क्रीन शॉट एंड्रॉइड

case R.id.id_menu_Save: 

      Bitmap bmp = SavePixels(0, 0, 800, 400, CCDirector.sharedDirector().gl); 

      File file = new File("/sdcard/test.jpg"); 
      try 
      { 
       file.createNewFile(); 
       FileOutputStream fos = new FileOutputStream(file); 
       bmp.compress(CompressFormat.JPEG, 100, fos); 

       Toast.makeText(getApplicationContext(), "Image Saved", 0).show(); 
       Log.i("Menu Save Button", "Image saved as JPEG"); 
      } 

      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 

      break; 

यह मेरा सहेजें छवि फ़ंक्शन है।

public static Bitmap SavePixels(int x, int y, int w, int h, GL10 gl) 
{ 
    int b[]=new int[w*(y+h)]; 
    int bt[]=new int[w*h]; 
    IntBuffer ib=IntBuffer.wrap(b); 
    ib.position(0); 
    gl.glReadPixels(x, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); 

    for(int i=0, k=0; i<h; i++, k++) 
    {//remember, that OpenGL bitmap is incompatible with Android bitmap 
     //and so, some correction need.   
      for(int j=0; j<w; j++) 
      { 
       int pix=b[i*w+j]; 
       int pb=(pix>>16)&0xff; 
       int pr=(pix<<16)&0x00ff0000; 
       int pix1=(pix&0xff00ff00) | pr | pb; 
       bt[(h-k-1)*w+j]=pix1; 
      } 
    } 

    Bitmap sb = Bitmap.createBitmap(bt, w, h, Bitmap.Config.ARGB_8888); 
    return sb; 
} 

उपर्युक्त के अलावा, मैं जो चाहता हूं वह मुझे सही दिशा में इंगित करना है। जैसे कि मुझे स्क्रीन के पिक्सल प्राप्त करना है, तो मुझे किस वर्ग/इकाई की खोज करनी चाहिए?

+0

मैंने कभी यह करने के लिए प्रयास नहीं किया है, लेकिन मैं यह मान लेगा क्षुधा कुछ अनुमति की जरूरत स्क्रीन को पढ़ने के लिए सक्षम होने के लिए। –

+0

gl.glReadPixels (x, 0, w, y + h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); यह लाइन त्रुटि दे रही है ... मुझे क्या करना चाहिए? –

उत्तर

2

बस नीचे दिए गए करने के लिए SavePixelx पद्धति को बदलने:

public static Bitmap SavePixels(int x, int y, int w, int h, GL10 gl) 
{ 
    int b[]=new int[w*(y+h)]; 
    int bt[]=new int[w*h]; 
    IntBuffer ib=IntBuffer.wrap(b); 
    ib.position(0); 
    gl.glReadPixels(x, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); 

    for(int i=0, k=0; i<h; i++, k++) 
    { 
      //remember, that OpenGL bitmap is incompatible with Android bitmap 
      //and so, some correction need.   
      for(int j=0; j<w; j++) 
      { 
       int pix=b[i*w+j]; 
       int pb=(pix>>16)&0xff; 
       int pr=(pix<<16)&0xffff0000; 
       int pix1=(pix&0xff00ff00) | pr | pb; 
       bt[(h-k-1)*w+j]=pix1; 
      } 
    } 

    Bitmap sb = Bitmap.createBitmap(bt, w, h, Bitmap.Config.ARGB_8888); 
    return sb; 
} 
+0

gl.glReadPixels (x, 0, w, y + h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); यह लाइन त्रुटि दे रही है ... मुझे क्या करना चाहिए? –

+0

यहां ग्लो क्या है? –

2

सिर्फ GL10.GL_RGB बदलने के लिए या bitmap.config में परिवर्तन करने के लिए प्रयास करें। यह काम हो सकता है।

+0

gl.glReadPixels (x, 0, w, y + h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); यह लाइन त्रुटि दे रही है ... मुझे क्या करना चाहिए? –

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