如何将Canvas 上的内容转换为一张Bitmap

如何将Canvas 上的内容转换为一张Bitmap,第1张

上面的API就是设置你要画图时保存图的BITMAP,你画的东西就在BITMAP中。这个bitmap可以通过BitmapcreateBitmap(width, height, config)来新建,而不是你从资源里加载的。

先setDrawingCacheEnabled(true);

你要显示的都显示出来后buildDrawingCache();

最后Bitmap b=getDrawingCache();

就ok了,这样就截屏了

用到的不仅仅包括png、gif、9png、jpg和各种Drawable系对象,还包括位图Bitmap

的处理也经常是影响着一个程序的高效性和健壮性。

为什么不直接用Bitmap传输?

位图文件虽好,但是非压缩格式,占用较大存储空间。

Bitmap主要方法有:获取图像宽高、释放,判断是否已释放和是否可修改,压缩、创建制定位图等功能

用于从不同的数据源(如文件、输入流、资源文件、字节数组、文件描述符等)解析、创建Bitmap对象

允许我们定义以何种方式如何读到内存

推荐阅读: Android - Bitmap-内存分析

注意事项:

decodeFileDescriptor比decodeFile高效

查看源码可以知道

替换成

建议采用decodeStream代替decodeResource。

因为BitmapFactorydecodeResource 加载的可能会经过缩放,该缩放目前是放在 java 层做的,效率比较低,而且需要消耗 java 层的内存。因此,如果大量使用该接口加载,容易导致OOM错误,BitmapFactorydecodeStream 不会对所加载的进行缩放,相比之下占用内存少,效率更高。

这两个接口各有用处,如果对性能要求较高,则应该使用 decodeStream;如果对性能要求不高,且需要 Android 自带的自适应缩放功能,则可以使用 decodeResource。

推荐阅读:[ BitmapFactorydecodeResource加载缩小的原因及解决方法

canvas和Matrix可对Bitmap进行旋转、放缩、平移、切错等 *** 作

可以用BitmaponCreateBitmap、Canvas的clipRect和clipPath等等方式

推荐阅读: android自定义View学习4--图像剪切与变换

对初始化Bitmap对象过程中可能发生的OutOfMemory异常进行了捕获。如果发生了OutOfMemory异常,应用不会崩溃,而是得到了一个默认的Bitmap图。

如果不进行缓存,尽管看到的是同一张文件,但是使用BitmapFactory类的方法来实例化出来的Bitmap,是不同的Bitmap对象。缓存可以避免新建多个Bitmap对象,避免内存的浪费。

如果像素过大,使用BitmapFactory类的方法实例化Bitmap的过程中,需要大于8M的内存空间,就必定会发生OutOfMemory异常。

可以将缩小,以减少载入过程中的内存的使用,避免异常发生。

推荐阅读:

Bitmap详解与Bitmap的内存优化

Bitmap bitmap = BitmapcreateBitmap(width, height, BitmapConfigARGB_8888);

Canvas canvas = new Canvas(bitmap);

然后在canvas上面进行绘制就行了 绘制的东西就会显示到bitmap上

以上就是关于如何将Canvas 上的内容转换为一张Bitmap全部的内容,包括:如何将Canvas 上的内容转换为一张Bitmap、Bitmap使用详解、如何将Canvas 上的内容转换为一张Bitmap-Android开发问答等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9767448.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存