안녕하세요
제가 전화번호부에 정보를 저장해두고 가져오는걸 하고 싶은데 사진을 가져오는 부분에서
막혀서 이렇게 질문드립니다.ㅠ.ㅠ
제가 여기저기 찾아본 결과로는 사진 data는 Photo.DATA15? 여기에 저장되는것 같아 index 값을 얻어와서 bitmap 으로 변환을 하려고 했는데 Photo_ID 의 index 는 43 이라고 나오는데 Photo.DATA15 의 index 는 7이라고 찍혀 제가 db를 확인한 결과 21번째 cloumn 에 있어서 임의로 index +21 을 인자로 넣어줘서 byte 값을 얻어 왔습니다
byte 값을 bitmap 변환하는 과정에서
SkImageDecoder::factory returned null 란 log 가 찍히면서 null 값을 가져옵니다.
디코딩을 할 수 없다는 말인가요?
조언좀 부탁드립니다.
while (cursor.moveToNext()) { // byte[] photoImage = cursor.getBlob(0); int photoId = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Photo._ID); int index = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Photo.DATA15); byte[] photoImage = cursor.getBlob(index + 21); orgImage = BitmapFactory.decodeByteArray(photoImage, 0, photoImage.length); Log.i("imgae", "Bitmap =" +orgImage); } cursor.close();
log 화면
03-17 01:54:15.974: INFO/imgae(454): Bitmap =null
03-17 01:54:15.974: DEBUG/skia(454): --- SkImageDecoder::Factory returned null
03-17 01:54:15.974: INFO/imgae(454): Bitmap =null
03-17 01:54:15.983: DEBUG/skia(454): --- SkImageDecoder::Factory returned null
03-17 01:54:15.983: INFO/imgae(454): Bitmap =null
아 index 에 더해준게 아니구요 photo_id 에 더해줬네요.
photo_id가 젤 첫번째 column 이라.
아 그리고 제가 지금 2.1버전 에뮬에서 작업중인데 shell 모드로 에뮬 db를 확인하던 중에
2.0 풀소스에서 사진을 저장할때 byte 로 DB에 저장해 주던 table 이 없어진걸 확인했는데
2.1에서는 어디에 저장 되는지 모르겠네요..
외국사이트를 들어가서 찾다보니 어떤분이 사진을 DB에 저장할때 사진 byte 로 저장안되고 단지
사진이 있는 uri 에 sync 만 해주고 실제 단말기에서는 이 사진을 불러올때 내부 코어가 이 작업을 수행한다는 말을 봤어요.
(영어를 못해서 정확하게 이해한건지는 모르겠네요.ㅠ.ㅠ)
index값이 맞지 않다는건 해당 메소드가 아니라는 거죠...
해당 index가 이쪽이 아닐까 생각되네요...
http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html
DATA15값이 7이고 실제 있는곳이 21인데.... +14가 맞지않나요 -_-;;