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



