在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)