Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中将视图另存为图像_Android_Image_Bitmap - Fatal编程技术网

在android中将视图另存为图像

在android中将视图另存为图像,android,image,bitmap,Android,Image,Bitmap,我正在进行一个项目,在该项目中,我创建了一个具有透明背景的自定义视图。现在我想创建此视图的图像。我使用下面的代码从位图中保存和创建图像,但生成的图像背景为黑色且不透明。我想要透明的背景。我怎样才能做到这一点 view = suraVersesFragment.getMyView(); view.setBackgroundColor(Color.TRANSPARENT); Bitmap b = Bitmap.createBitmap(view.get

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

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();
            }

嘿嗨,试试这个透明的

Bitmap bitmap= Bitmap.createBitmap(255, 255, Bitmap.Config.ARGB_8888);
然后尝试这一行(A是alpha值间隔为0-255,0是完全透明的)


要接收视图的非缩放位图,可以在启用图形缓存后调用此方法

view.getDrawingCache()
api说明了该方法:

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

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

您还可以设置背景的颜色

view.setDrawingCacheBackgroundColor(Color.XY)
您也可以在这里查看:

如果要将其存储为png,请尝试将其存储为jpeg(temporary file.jpg),也就是说,如果加载的文件是黑色的。如果是视图本身,则可能是其他一些内容。据我所知,jpeg不支持透明背景..对。很抱歉,今天早上我的思维出现倒退,暂时失效,请将压缩格式更改为
b.compress(Bitmap.CompressFormat.PNG,100,bytes)
将其压缩为PNG而不是JPEG。您正在以JEPG格式(非透明)压缩,然后将其保存为PNG(将采用非透明背景)
view.setDrawingCacheBackgroundColor(Color.XY)