마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

sqlite에 Drawable 이미지 저장하는법

+1 추천

다운로드 앱 목록 중 선택된 앱의 아이콘을 db에 저장해서 화면에 뿌리려고 합니다.

구글링을 해보니 byte[]로 db에 저장한 뒤 꺼낼 때 bitmap이나 drawable로 뿌려준다고 하면 된다고 하더군요

 

그래서

public static Drawable getDrawableFromByteArray(byte[] b) {
    Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
    return new BitmapDrawable(context.getResources(), bitmap);
}
public byte[] getByteArrayFromDrawable(Drawable d) {
    Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(),
d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
    return stream.toByteArray();
}

이렇게 2개 함수를 사용했습니다.

db생성은 Create table ... icon BLOB.. 로 했습니다.

그런데 Factory returned null 라는 오류가 뜨네요.. 원인좀 알 수 있을까요? ㅠㅠ

핸디 (1,840 포인트) 님이 2016년 11월 1일 질문

1개의 답변

0 추천
d 로 전달 받은 width, height 값도 찍어보시고 compress 시 0을 주면 어떻게 되는지도 파악해보시면 되겠네요
aucd29 (218,390 포인트) 님이 2016년 11월 1일 답변
width, height는 각 192로 나옵니다.
compress시 0을 주라는 말은 어떤 의미인가요? ㅠㅠ 제가 초짜라서요..
다 소용없네요 ㅠ
db에 저장된 값을 열어보면 0x0 5b52 4062 3466 466 3436... 이렇게 한 줄만 나와있습니다. 다른 이미지 저장값을 보면 수십줄씩 나와있던데 혹시 이것 때문인가 생각도 드네요

buffer에 담는 과정 중에 반복문을 써야한다거나.. 그러지는 않을까요?
개인적으로 안된다는게 이해가 안되지만 -_ - 어쨋든 예제를 작성해봤습니다.
http://aucd29.tistory.com/3634
insert 부분에서 오류가 있었네요.  db.execSQL(sql); 이 아닌 아래 링크처럼 하니까 해결되었습니다. 아무튼 답변감사합니다
http://stackoverflow.com/questions/8884058/sqlite-is-it-possible-to-insert-a-blob-via-insert-statement
쿼리 문제 였나 보군요, 욕보셨습니다.
...