【问题标题】:save bitmap as a jpeg file将位图保存为 jpeg 文件
【发布时间】:2012-01-10 08:25:46
【问题描述】:

这个问题很简单,我们可以:

public static void writePhotoJpg(Bitmap data, String pathName) {
    File file = new File(pathName);
    try {
        file.createNewFile();
        // BufferedOutputStream os = new BufferedOutputStream(
        // new FileOutputStream(file));

        FileOutputStream os = new FileOutputStream(file);
        data.compress(Bitmap.CompressFormat.JPEG, 100, os);
        os.flush();
        os.close();


    } catch (Exception e) {
        e.printStackTrace();
    }
}

但此方法并非全部成功:因为“注意:并非所有格式都直接支持所有位图配置,因此从 BitmapFactory 返回的位图可能处于不同的位深度,和/或可能丢失了每个像素的 alpha (例如 JPEG 仅支持不透明像素)。”在谷歌文档中。没有运气我有这个问题:在我使用的相机预览中:

 private Bitmap  printScreen() {
    View view = this.getWindow().getDecorView();
    // if (view.isDrawingCacheEnabled()) {
    view.setDrawingCacheEnabled(true);
    Calendar c = Calendar.getInstance();
    String date = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DAY_OF_MONTH) + "  " + c.get(Calendar.HOUR_OF_DAY) + "-" + c.get(Calendar.MINUTE) + "-" + c.get(Calendar.SECOND);
    // }
    view.buildDrawingCache();

    Bitmap bmp = view.getDrawingCache();

    return  bmp ;
}

所以当我使用 setImageBitmap(bmp) 时,看起来很好,但是当我打开保存 jpeg 文件时它是黑色 jpeg。所以我认为保存方法不太好,你能告诉我另一种保存方法吗?

【问题讨论】:

    标签: android image


    【解决方案1】:

    你可以试试这个:

     public static final int BUFFER_SIZE = 1024 * 8;
     static void writeExternalToCache(Bitmap bitmap, File file) {
        try {
            file.createNewFile();
            FileOutputStream fos = new FileOutputStream(file);
            final BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER_SIZE);
            bitmap.compress(CompressFormat.JPEG, 100, bos);
            bos.flush();
            bos.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
    
        }
    
    }
    

    它在我的代码中有效,所以如果它不起作用,请尝试查找错误:

    1.位图显示对吗?

    2.位图保存文件在哪里?该文件有一些限制?喜欢大小或...

    如果错误是您发帖的原因,您可以尝试使用Bitmap.Config.RGB_565 再次解码位图。

    【讨论】:

    • 对不起,没有效果。我也使用 Bitmap.Config.RGB_565
    • 太棒了!但我已经尝试使用此代码多次失败,因为我错过了一件事......将此权限添加到清单文件中: 谢谢。跨度>
    【解决方案2】:

    使用.getRootView() 视图方法或布局包含此视图,使用它(例如)ma​​inLayout 在索引 1 处包含一个图像视图,然后 mainlayou.getChildAt(1) 获取视图。

    例如

    View v1 = mainLayout.getChildAt(1);     //OR  View v1 = mainLayout.getRootView();   
            v1.setDrawingCacheEnabled(true);
            Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
            v1.setDrawingCacheEnabled(false);
            return bitmap;
    

    希望对你有所帮助...

    【讨论】:

    • 我已经尝试过并为我工作。如果我想截取特定视图的屏幕截图并将其保存为位图是可能的。
    • 是的,如果使用通用环境正确,但使用catch Camera预览失败,保存文件jpeg为黑色,但imageview显示正确
    猜你喜欢
    • 1970-01-01
    • 2014-02-08
    • 2011-12-30
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2016-09-11
    相关资源
    最近更新 更多