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

초보입니다 도와주세요 ㅜㅜㅜㅜSKImage::Decode Factory returned null

0 추천

스크린 캡처 후  SQlite 이미지를 byte로 저장 한 다음에 decodefactory로 출력하려 합니다

웹뷰의 스크린 샷 캡처->비트맵으로 받아->바이트로 변환->sqlite blob으로 저장->저장확인후 리스뷰에 출력

하려고 하는데 에러가 납니다 SkImageDecoder::Factory returend null

 

초록색 글씨는 제가 sqlite에 잘 저장되어있나 확인 한 겁니다 저장후 로그켓에 출력은 잘 되는데 Factory가 널을 반환하는 이유를 모르겠어여......

아래는 코드입니다

webView1.setDrawingCacheEnabled(true);

webView1.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_AUTO);

screenshot = webView1.getDrawingCache();///////////////////////웹뷰를 비트맵으로 저장

  ByteArrayOutputStream stream = new ByteArrayOutputStream() ;

byteArray = stream.toByteArray();/////////////////////////////////바이트로 변환

 

addList(v,byteArray);/////////////////////////////바이트를 DB에 저장하는 함수 호출

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 public void addList(View view, final byte[] byteArray) {

ㅡ중략ㅡ

 

FavoriteFile item1= new FavoriteFile( byteArray, ListName, FavUrl );

FavoriteDB.insertFile(item1, FavoriteActivity.dbHelper);

Toast.makeText(WebViewActivity.this,ListName+" 추가되었습니다", Toast.LENGTH_SHORT).show();

ㅡ중략ㅡ

    }

제대로 입력되었는지 확인했음!!![B@41234545 이런식으로 잘 들어감

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

public static void insertFile( FavoriteFile vo, FavoriteDBHelper dbHelper ){

SQLiteDatabase db = dbHelper.getWritableDatabase();

 

StringBuilder sql = new StringBuilder("INSERT INTO file2 VALUES ( null, '");

sql.append( vo.getIcon());

sql.append( "','" );

sql.append( vo.getFileName() );

sql.append( "','" );

sql.append( vo.getFavUrl() );

sql.append( "')");

 

Log.i("mylog", sql.toString());

db.execSQL( sql.toString() );

db.close();

}/////////////////////////////////삽입 DB함수

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

ImageView img = (ImageView) convertView.findViewById(R.id.filelist_img);

byte[] outImage=cs.getBlob(1);

ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);

        Bitmap theImage = BitmapFactory.decodeStream(imageStream);///////////////////////////////////////여기서 에러가 나네요 ㅜㅜ                                                                                                                                                            null값이 반환됩니다

img.setImageBitmap(theImage);

그리고 제가 아침에 똑같은 질문을 올렸었는데 찾아보니깐 YUV포맷 어쩌고 저쩌고 있더라구요 그래서

YUV포맷을 ->비트맵으로 저장 한 후-바이트로 변환->DB삽입 출력 하영는데

이런식으로 출력이 됩니다 이때 에러는 안나지만 onFlyCompress라고 로그에 찍히네요 ㅜㅜㅜㅜ

이때 코드는 아래와 같습니다

Bitmap bitmap=getBitmapImageFromYUV(cs.getBlob(1), 500, 500);

((ImageView) findViewById(R.id.imgtest)).setImageBitmap(bitmap);

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

public static Bitmap getBitmapImageFromYUV(byte[] data, int width, int height) {

        YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, width, height, null);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        yuvimage.compressToJpeg(new Rect(0, 0, width, height), 80, baos);

        byte[] jdata = baos.toByteArray();

        BitmapFactory.Options bitmapFatoryOptions = new BitmapFactory.Options();

        bitmapFatoryOptions.inPreferredConfig = Bitmap.Config.RGB_565;

        Bitmap bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length, bitmapFatoryOptions);

        return bmp;

 

 

도와주셔요 고수님들 ㅜㅜㅜ

나는안드로오 (960 포인트) 님이 2014년 8월 21일 질문

1개의 답변

+1 추천
 
채택된 답변

StringBuilder를 사용해서 SQL문을 만들고 있군요

바이너리데이터를 문자열로 해서 넣을려면 좀 곤란해지겠죠?

String sql = "INSERT INTO file2 VALUES (?, ?);";
SQLiteStatement smt = db.compileStatement(sql);
smt.bindString(1, value1);
smt.bindBlob(2, byteArray);
smt.executeInsert();
 
대략 이런식으로 해보세요
 
alkyne (22,960 포인트) 님이 2014년 8월 21일 답변
나는안드로오님이 2014년 8월 22일 채택됨
정말 정말 너무 감사드립니다 ㅜ해결했어요ㅜㅜㅜ진짜 7일동안 이거에만 매달렸단 말이에요 ㅜㅜ너무너무 감사드립니다 ㅜㅜ
이것떔에 하루종일 삽질했는데 덕분에 해결했습니다.
정말 감사합니다 ^ ^
...