Question

I have a layout in an Android activity, I convert it as an image and then share it on different social networks. The things is that the quality is not good at all, I have artifacts on the image, and the quality depend of the size of the screen.

Is there any way to improve the quality ? I can't store the complete layout image as a static image in the application directory, I need it to be generated on the go.

Here is code I use to transform the layout into a 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();
        }

Edit: My bad, I left ARGB_4444, the fact is I made a lot of test before posting the question on SO, I just forgot to put ARGB_8888 in. Still the image quality is bad on Android phone with tiny screen. If only I could tell to always use HDPI drawable while capturing the layout.

Was it helpful?

Solution

ARGB_4444 means that you have only 4 bits per channel (a really poor quality).

Use ARGB_8888.

OTHER TIPS

you are using Bitmap.Config.ARGB_4444. I suggest you to use ARGB_8888, like Google tells us

ARGB_4444 This field was deprecated in API level . Because of the poor quality of this configuration, it is advised to use ARGB_8888 instead.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top