将位图保存为jpeg文件

时间:2012-01-10 08:25:46

标签: android image

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

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返回的位图可能位于不同的bitdepth中,和/或可能丢失了每像素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)时,看起来非常好,但是当我打开save jpeg文件时它是一个黑色的jpeg.so我认为save方法不好,你能告诉我另一种保存方法吗?

2 个答案:

答案 0 :(得分:3)

你可以试试这个:

 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再次解码位图。

答案 1 :(得分:0)

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

E.g。

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

希望对你有所帮助......