将视图保存为android中的图像

时间:2015-06-19 12:17:08

标签: android image bitmap

我正在开发一个项目,我在其中创建了一个透明背景的自定义视图。现在我想创建一个这个视图的图像。我使用以下代码从位图保存和创建图像,但生成的图像具有黑色背景而不透明。我想要透明的背景。我怎样才能做到这一点?

view = suraVersesFragment.getMyView();
            view.setBackgroundColor(Color.TRANSPARENT);
            Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas c = new Canvas(b);

            c.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
            view.draw(c);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            b.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.png");
            try {
                f.createNewFile();
                FileOutputStream fo = new FileOutputStream(f);
                fo.write(bytes.toByteArray());
            } catch (IOException e) {
                e.printStackTrace();
            }

2 个答案:

答案 0 :(得分:1)

要接收视图的非缩放位图,可以在启用绘图缓存

后调用此方法
view.getDrawingCache()

api告诉了这个方法:

  

返回缓存此视图图形的位图。禁用缓存时返回的位图为null。如果启用了缓存且缓存未就绪,则此方法将创建缓存。启用缓存时,调用draw(android.graphics.Canvas)不会从缓存中绘制。要从缓存中受益,您必须通过调用此方法来请求绘图缓存,并在返回的位图不为空时在屏幕上绘制它。

关于兼容模式下自动缩放的注意事项:如果未启用自动缩放,此方法将创建与此视图大小相同的位图。由于此位图将由父ViewGroup绘制,因此屏幕上的结果可能会显示缩放工件。要避免此类瑕疵,应通过将自动缩放设置为true来调用此方法。但是,这样做会生成与视图大小不同的位图。这意味着您的应用程序必须能够处理此大小。

您也可以设置背景颜色

view.setDrawingCacheBackgroundColor(Color.XY)

你也可以在这里查看: http://developer.android.com/reference/android/view/View.html#getDrawingCache(boolean) http://developer.android.com/reference/android/view/View.html#getDrawingCache() http://developer.android.com/reference/android/view/View.html#setDrawingCacheBackgroundColor(int)

答案 1 :(得分:0)

嗨嗨试试透明

Bitmap bitmap= Bitmap.createBitmap(255, 255, Bitmap.Config.ARGB_8888);

之后尝试这一行(A是alpha值区间是0-255而0是完全透明的)。

bitmap.eraseColor(Color.argb(AAA,RRR,GGG,BBB));

Check This