안드로이드 개발 질문/답변
(글 수 45,052)
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)