Растровое изображение toString и обратно - PullRequest
1 голос
/ 01 февраля 2012

в андроиде Я сделал снимок камерой и вернул его к своей деятельности:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == Constatnts.ANSWER_TO_LIFE_UNIVERSE_AND_EVERYTHING && data != null && data.getExtras() != null && data.getExtras().get("data") != null) {  
        Bitmap snapshot = (Bitmap) data.getExtras().get("data"); 
        String convert = InputOutput.bitmapToString(this, snapshot);
        Bitmap back = InputOutput.stringToBitmap(convert);
    }  
}

Когда я назначаю «снимок» растрового изображения для просмотра изображений, он выглядит довольно хорошо и работает хорошо.Но когда я присваиваю растровое изображение «назад» виду изображения, оно не меняет свой вид. Поэтому в преобразовании должно быть что-то не так. Вот мой код преобразования:

public static Bitmap stringToBitmap(String bitmapString) {
    byte[] bytes = Base64.decode(bitmapString, Base64.DEFAULT);
    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    return bitmap;
}

public static String bitmapToString(Context context, Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    bitmap.recycle();
    byte[] byteArray = stream.toByteArray();
    try {
        stream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    stream.write(byteArray, 0, byteArray.length);
    stream = null;
    String strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE);
    return strBase64;
}

Любые предположения, что идет не такздесь? Спасибо!

1 Ответ

4 голосов
/ 01 февраля 2012

Вот код, который я использовал один раз, чтобы попробовать это преобразование, оно должно работать:

public final static String bitmapToString(Bitmap in){
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    in.compress(Bitmap.CompressFormat.PNG, 100, bytes);
    return Base64.encodeToString(bytes.toByteArray(),Base64.DEFAULT);
}
public final static Bitmap stringToBitmap(String in){
    byte[] bytes = Base64.decode(in, Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}

Возможно, вы захотите добавить несколько close() вызовов в потоки.

...