сохранение растрового изображения - IO Exception - PullRequest
0 голосов
/ 29 января 2012

Когда я сохраняю свое растровое изображение, это приводит меня к IOExeption, почему?Я не знаю:

    static Bitmap[] bmp = new Bitmap[4];

public static void save(FileIO files, int location) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    try {
        File f = new File(Environment.getExternalStorageDirectory() 
                  + File.separator + "test" + File.separator + "mind");
        Log.d("path", f.toString());
        f.createNewFile();
        // write the bytes in file
        FileOutputStream fo = new FileOutputStream(f);
        bmp[location].compress(Bitmap.CompressFormat.PNG, 100, bytes);
        fo.write(bytes.toByteArray());
        fo.close();
        Log.d("fisnish", "Bitmap saved");
    } catch (IOException e) {
        Log.d("IO", e.getMessage());
    }
}

Logcat при сохранении:

01-29 00:53:58.020: DEBUG/path(8222): /mnt/sdcard/test/mind
01-29 00:53:58.060: DEBUG/IO(8222): Permission denied
01-29 00:53:58.240: DEBUG/dalvikvm(8222): GC_EXTERNAL_ALLOC freed 7K, 53% free 2563K/5379K, external 5375K/6713K, paused 178ms
01-29 00:54:02.029: DEBUG/dalvikvm(4723): GC_EXPLICIT freed 7K, 53% free 2643K/5511K, external 1625K/2137K, paused 3421ms

У меня есть разрешение пользователя, которое мне нужно () Но оно все равно не работаетВ чем проблема?

Ответы [ 3 ]

2 голосов
/ 29 января 2012

попробуйте этот масштаб растровых изображений, используя canvas.drawBitmap с предоставлением матрицы.

public static Bitmap scaleBitmap(Bitmap bitmap, int wantedWidth, int wantedHeight) {
    Bitmap output = Bitmap.createBitmap(wantedWidth, wantedHeight, Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    Matrix m = new Matrix();
    m.setScale((float) wantedWidth / bitmap.getWidth(), (float) wantedHeight / bitmap.getHeight());
    canvas.drawBitmap(bitmap, m, new Paint());

    return output;
}
2 голосов
/ 29 января 2012

Включаете ли вы правильные разрешения?Вам потребуется разрешение на запись во внешнее хранилище.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Изменить

Попробуйте поместить файл в каталог на SDCARD, например:

File f = new File(Environment.getExternalStorageDirectory() 
      + File.separator + "test" + File.Separator + "mind");
1 голос
/ 29 января 2012

Загрузка звучит как работа для BitmapFactory.decodeFile . Кроме того, я бы сжал непосредственно к вашему потоку вывода файла:

public static void save(FileIO files, int location) {
    try {
        File f = new File(Environment.getExternalStorageDirectory()
                + File.separator + "numbers" + location);
        // write the bytes in file
        FileOutputStream fo = new FileOutputStream(f);
        bmp[location].compress(Bitmap.CompressFormat.PNG, 40, fo);
        fo.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
...