Android 用Path和Bitmap在绘制折线

本文介绍了在Android中,当使用Path绘制大图形时遇到的GPU内存限制问题,以及作者提出的解决方案——通过自定义Bitmap进行绘制。作者分析了Path在GPU加速下转化为texture可能导致的绘制失败,并详细说明了如何利用Bitmap绕过这个问题。性能测试部分展示了在不同GPU加速情况下应用的运行状况,指出即便使用Bitmap,当Path过大时仍可能面临CPU性能瓶颈导致的卡顿。
摘要由CSDN通过智能技术生成

一、问题概述

当我们希望通过Path绘制图形,而Path又足够大时,开启了硬件加速的手机很可能会无法按编程的预期实现图形绘制,同时Logcat也会出现“Shape path too large to be rendered into a texture” 的警示。

作者分析了他遇到的问题:“Path通常都是CPU绘制的,但是当Path所在的View被设置成GPU加速,Path首先被转换成GPU中的texture,再从GPU绘制到界面。当Path足够大时,将会超出GPU的texture限制,Path绘制到界面失败,因为OpenGL绝不会允许这种超过硬件限制的操作”。


二、解决方案

作者提出的解决方案是:“自定义一个和View一样大的Bitmap,首先将Path转换成Bitmap,通过自定义的Bitmap进行界面绘制”。

方案能够解决问题的原因在于:“虽然Path较大,但已经被转换成了Bitmap,不再像Path一样GPU加速时首先被转换为texture。通过操作Bitmap,即移动它所在的画布Canvas,可以使我们需要展示的某段Path显示到Bitmap上。因为在Android4.2中,绘制和Canvas相关的Bitmap是不需要GPU的。”

通过这种方式,无论手机是否打开了GPU加速,绘制Path时,尤其是Path较大的情况,都会由于Bitmap的介入而选择CPU处理,从而避免了GPU的内存限制问题。但是,需要继续补充的是,当Path[足够]大时,应用即使能够通过CPU避开GPU内存限制尽情绘制,最终还是会撞上CPU图像处理性能瓶颈的枪口。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值