将布局转换为图像,如何获得高质量?

时间:2013-01-10 10:12:49

标签: java android image-capture image-compression

我在Android活动中有一个布局,我将其转换为图像,然后在不同的社交网络上分享。 事情是质量不好,我在图像上有文物,质量取决于屏幕的大小。

有没有办法提高质量?我无法将完整的布局图像存储为应用程序目录中的静态图像,我需要在运行时生成它。

这是我用来将布局转换为PNG的代码。

Bitmap bitmap = null;   
        try {
            bitmap = Bitmap.createBitmap(dashboardView.getWidth(),
                    dashboardView.getHeight(), Bitmap.Config.ARGB_4444);
            dashboardView.draw(new Canvas(bitmap));
        } catch (Exception e) {
            // Logger.e(e.toString());
        }

        FileOutputStream fileOutputStream = null;
        File path = Environment
                .getExternalStorageDirectory();
        File file = new File(path, "wayzupDashboard" + ".png");
        try {
            fileOutputStream = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
        bitmap.compress(CompressFormat.PNG, 100, bos);
        try {
            bos.flush();
            bos.close();
            fileOutputStream.flush();
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

编辑:我的不好,我离开了ARGB_4444,事实是我在发布问题之前做了很多测试,我只是忘了把ARGB_8888放进去。但是在屏幕很小的Android手机上图像质量仍然不好。如果只有我可以告诉总是在捕获布局时使用HDPI drawable。

2 个答案:

答案 0 :(得分:1)

ARGB_4444意味着每个频道只有4位(质量非常差)。

使用ARGB_8888。

答案 1 :(得分:0)

您正在使用Bitmap.Config.ARGB_4444。我建议您使用ARGB_8888,例如Google tells us

  

ARGB_4444此字段已在API级别中弃用。因为   这种配置质量很差,建议使用ARGB_8888   代替。