Intent -> Uri -> Bitmap -> byteArrayStream -> jni -> cocos2d-x Sprite 으로 빼내서 처리하려고 하거든요.


그런데 무슨 문제가 생겼는지 비트맵으로 읽어오면 bmp.mWidth 가 -1로 보이네요.

그래서 읽어온 최종 데이타를 화면에 출력하면 온통 하얀색만 보이고요.

이미지 크기는 잘도 읽어오는데 대체 왜 이런지 이해가 안되네요.


혹시 이런 문제 겪어보신 분이나 아시는 분은 부디 가르쳐주쎼요 ㅠㅠ


        		case HANDLER_GALLERY_OPEN:
        			/*







       			Intent intent = new Intent( Intent.ACTION_PICK ) ;
        			intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
        			intent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);*/
       			Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        			intent.setType("image/*");
        			startActivityForResult(intent, RESULT_LOAD_IMAGE);   



public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != intent) {
        	Uri selPhotoUri = intent.getData();
        
        	 Bitmap bitmap = null;
             try {
				bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selPhotoUri);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
             if ( bitmap != null ) {
            	 ByteArrayOutputStream stream = new ByteArrayOutputStream();
            	 //int size = stream.size();
            	 
            	 bitmap.compress( CompressFormat.PNG, 100, stream);
            	 
                 bArray = stream.toByteArray();
                 int length = bArray.length;
                 mGLView.SendUserImg(bArray, length, 90, 90);
                 
             }
        }
    }


public void SendUserImgPath(final String path) {
		queueEvent(new Runnable() {
            @Override
            public void run() {
            	nativeSendUserImgPath( path );
            }
        });
	}










    void Java_org_cocos2dx_lib_Cocos2dxGLSurfaceView_nativeSendUserImg( JNIEnv* env, jobject thiz, jbyteArray img, jint length, jint width, jint height )
    {
    	
    	jbyte *b = (jbyte *)env->GetByteArrayElements(img, NULL);
	  	
	  	SpriteAlbumData::instance()->set((unsigned char*)b, width, height);
  		
  		env->ReleaseByteArrayElements(img, b, 0 );    	
    }


void SpriteAlbumData::set( unsigned char* pData, int width, int height )
{
	CCTexture2D * tex = new CCTexture2D();
	tex->initWithData((void*)pData, kCCTexture2DPixelFormat_RGBA8888, width, height, CCSizeMake(width, height));
	CCSprite *sprite = CCSprite::spriteWithTexture(tex);
	
	m_sprLoaded = Sprite::create(sprite);
	
	m_sprites.push_back(m_sprLoaded);
}


===========


로드된 비트맵 정보

bitmap.mDestiny == 240;

bitmap.mHeight == -1;

bitmap.mWidth == -1;

bitmap.mIsMutable == false;

bitmap.mNinePatchChunk == NULL;

bitmap.mRecycled == false;


그리고 이클립스 로그에는 이런넘이 찍히는군요


08-02 23:43:07.302: E/libEGL(14797): call to OpenGL ES API with no current context (logged once per thread)