繁体   English   中英

用位图工厂保存图像文件

[英]save image file with bitmap factory

我在位图工厂中遇到问题。 我有一种缩小和旋转图像以在图像视图中显示预览的方法,但是我想用新的尺寸保存它。 我只是绕过inputfilestream和outputfilestream,但没有保存它。 有人知道将我的位图放入outpufilestream中的清晰方法吗? 非常感谢这是我的代码

@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);


}

您是否尝试过这样做? 假设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 ),第二个参数是压缩质量。

好的,我发现了所缺少的。 必须创建一个新的字节数组以将我的位图转换为file:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM