сохранить файл изображения с растровым изображением - PullRequest
0 голосов
/ 18 октября 2018

У меня проблема с фабрикой растровых изображений.У меня есть метод для уменьшения и поворота изображения, чтобы показать предварительный просмотр в представлении изображения, но я хотел бы сохранить это с новым размером.Я просто переворачиваю с inputfilestream и outputfilestream, но не могу его сохранить.Кто-нибудь знает четкий способ поместить мое растровое изображение в поток outpufile?Большое спасибо, вот мой код

@Override
protected void onResume() {
    super.onResume();
    File[] fileArray;
    final File root;
    File chemin = Environment.getExternalStorageDirectory();
    String filepath = chemin + "/SmartCollecte/PARC/OUT/" + fichano + "_" + conteneur_s+"_"+cpt+".jpg";


    try {
        decodeFile(filepath);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }}


public void decodeFile(String filePath) {

    // Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, o);

    // The new size we want to scale to
    final int REQUIRED_SIZE = 1024;

    // Find the correct scale value. It should be the power of 2.
    int width_tmp = o.outWidth, height_tmp = o.outHeight;
    int scale = 1;
    while (true) {
        if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
            break;
        width_tmp /= 2;
        height_tmp /= 2;
        scale *= 2;
    }

    // Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    Bitmap b1 = BitmapFactory.decodeFile(filePath, o2);
    Bitmap b = ExifUtils.rotateBitmap(filePath, b1);
    FileOutputStream fos = new FileOutputStream(filePath);
    b.compress(Bitmap.CompressFormat.PNG,100,fos);
    fos.close();
    showImg.setImageBitmap(b);


}

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

хорошо, я узнал, чего не хватало.пришлось преобразовать новый байтовый массив для преобразования моего растрового изображения в файл:

String filepathcomp = Environment.getExternalStorageDirectory()+"/SmartCollecte/PARC/OUT/"+ fichano + "_" + conteneur_s+"_"+cpt+".jpg";
    File f = new File(filepathcomp);
    Bitmap newbitmap = b;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    newbitmap.compress(Bitmap.CompressFormat.JPEG,80,bos);
    byte[] bitmapdata = bos.toByteArray();
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(bitmapdata);
    fos.flush();
    fos.close();
0 голосов
/ 18 октября 2018

Вы пытались сделать это так?Предполагая, что bitmap является растровым изображением, которое вы хотите сохранить.

Также взгляните на некоторые существующие системные каталоги.

final FileOutputStream fos = new FileOutputStream(new File(filepath + "_scaled.jpg"));
try {
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
} catch (IOException e) {
    // handle exception
} finally {
    fos.close
}

Источник

Где первый параметр Bitmap.compress () - это желаемый формат вывода (см. CompressFormat), а второй параметр - качество сжатия.

...