2014-12-24 4 views
0

Я пытаюсь создать приложение, в котором мне нужно хранить и извлекать изображение из базы данных SQLite. Я получаю программу для хранения изображения в виде байтового массива с использованием BLOB, и я также могу получить массив байтов, но при декодировании массива в растровое изображение BitmapFactory возвращает null. Пожалуйста помоги. Вот код, который я использую для декодирования массива.BitmapFactory return null

Cursor c=db.rawQuery("SELECT * FROM student WHERE name='"+"1"+"'", null); 
       if(c.moveToFirst()) 
       { 
        byte[] outImage=c.getBlob(1); 
        Log.d("The out image is", String.valueOf(outImage)); 
        Bitmap bitmap = BitmapFactory.decodeByteArray(outImage , 0, outImage .length); 
        iv.setImageBitmap(bitmap); 
       } 

Это, как я вставив байт [] в базе данных:

if(requestCode==CAMERA_REQUEST && resultCode==RESULT_OK){ 

       Bitmap yourImage = (Bitmap) data.getExtras().get("data"); 
       // convert bitmap to byte 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       yourImage.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
       byte[] imageInByte = stream.toByteArray(); 
       Log.e("output before conversion", imageInByte.toString()); 
       // Inserting Contacts 
       Log.d("Insert: ", "Inserting .."); 
       db.execSQL("INSERT INTO student VALUES('"+"1"+"','"+imageInByte+"');"); 
       Log.d("Success: ", "Image Saved");  
     } 

LogCat читает что-то вроде этого

12-24 23:39:49.777: E/output before conversion(22523): [[email protected] 
12-24 23:39:49.778: D/Insert:(22523): Inserting .. 
12-24 23:39:49.840: D/Success:(22523): Image Saved 
12-24 23:39:51.579: D/The out image is(22523): [[email protected] 
12-24 23:39:51.580: D/skia(22523): --- SkImageDecoder::Factory returned null 
+1

Я не думаю, что вы можете получить массив байтов из бинарного так: http://stackoverflow.com/questions/6662432/easiest-way-to-convert-a- blob-in-a-byte-array –

+1

«Я получаю программу для хранения изображения в виде байтового массива с использованием BLOB». Не делайте этого. Пусть файловая система управляет такими вещами. Сохраните изображение как обычный файл и сохраните только имя файла (и путь) в своей базе данных. –

+0

@JASONGPETERSON спасибо за ссылку, это помогло! –

ответ

0

декодером возвращения null, потому что вы не пропуская достоверные данные , Сначала конвертировать blob в byteArray

Blob blob = c.getBlob(1); 
int blobLength = (int) blob.length(); 
byte[] outImage = blob.getBytes(1, blobLength); 
Log.d("The out image is", String.valueOf(outImage)); 
       Bitmap bitmap = BitmapFactory.decodeByteArray(outImage , 0, outImage .length); 
       iv.setImageBitmap(bitmap); 

blob.free(); 
+0

Я пробовал ваш код, он просил меня изменить тип blob на байт [], в первой строке! –

+0

@SwapnilHarkanth Да. Вы правы. Вам не нужно фактически конвертировать. Пожалуйста, дайте мне знать, как вы вставляете свой blob в db – Praveen

+0

Я использую простой запрос, чтобы вставить blob в db. на самом деле я конвертирую фотографию, сделанную камерой в байт [], а затем вставляю ее в db с помощью запроса. –