Android4.2中Bitmap的copyPixelsFromBuffer( )crash

        开发了一个观看摄像头视频的应用,一直用的很好,有一天客户突然反馈说在他的手机上崩了,顿时无语。问了下,才知道客户用的Galaxy Nexus 3用的是Android4.2系统,当初开发程序的时候,4.2的设备还木有,估计是兼容性的问题。

       找了个4.2的设备,运行报以下错误:

05-29 16:21:22.389: D/AndroidRuntime(1173): Shutting down VM
05-29 16:21:22.389: W/dalvikvm(1173): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-29 16:21:22.459: E/AndroidRuntime(1173): FATAL EXCEPTION: main
05-29 16:21:22.459: E/AndroidRuntime(1173): java.lang.RuntimeException: Buffer not large enough for pixels
05-29 16:21:22.459: E/AndroidRuntime(1173): at android.graphics.Bitmap.copyPixelsFromBuffer(Bitmap.java:417)
一看是Bitmap的copyPixelsFromBuffer( )方法出了问题,估计是Google在系统里动了手脚,心里想想就恨的慌。没办法,代码也没有,首先想到的是去看4.2的API的差异,没有提及与copyPixelsFromBuffer( )相关的内容。网上看了下,在这篇博文: http://blog.sina.com.cn/s/blog_7b83134b0101brgs.html找到了问题的关键。

        原来4.2中对copyPixelsFromBuffer( )执行的缓冲区进行了调整,每次拷贝结束后,将下次拷贝的起始位置置为前一次拷贝结束时的位置。这样,如果对同一个ByteBuffer执行多次连续拷贝,就要注意每次起始位置。我看了自己的代码,果然这个错误是对一个ByteBuffer进行连续二次拷贝时,第二次的起始位置没有重置为0导致的。于是在第二次执行
copyPixelsFromBuffer( )前,现执行下ByteBuffer的rewind( ),问题解决。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何雷 — 智能汽车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值