android 5.0截屏代码,surfaceview 大小 记录:Android(5.0)截屏的实现(5)

????acquireLatestImage()

????从ImageReader的队列中获取最新的Image ,删除旧images 。 如果没有新图像可用,则返回null 。如果已经close了,那么将不会是最新的数据图像。对于大多情况可以使用acquireNextImage(),它更加适合处理实时数据.。在使用这个方法读取图片的时候,要注意maxImages不能小于2,从字面上和上面的知识我们了解到它是获取一张,丢弃一张。如果小于2的话可能会导致预期丢弃失败

????acquireNextImage()

????从ImageReader的队列中获取下一个Image。 如果没有新图像可用,则返回null 。注意皮球,警告:考虑使用acquireLatestImage() ,因为它会自动释放较旧的图像,并允许运行较慢的处理最新的帧。 建议在批处理/后台处理中使用acquireNextImage() 。错误地使用此功能可能会导致图像出现延迟不断增加,然后是完全失速,看起来没有新的图像出现。

????Image

???? 类注释:提到这个类,对于我们来说有些陌生,其实我们是使用过它的。回忆一下调用系统相机拍照,是不是游戏记忆了。可以查看文章底部的参考链接。Image是一个完整的多媒体图像缓冲区,如:MediaCodec、camera2。surfaceview 大小可以通过一个或多个ByteBuffer高效直接的访问,每一个缓冲区都封装在Plane这个平面布中。这里直接获取的是缓存流,这个和Bitmap有直接的区别。Image通常是由硬件直接生成或使用的,因此它们是整个系统的共享资源,在不使用的时候,应该尽快的关闭。不能直接作为UI资源。在使用ImageReader从各种媒体源读出图像时,超过getMaxImages范围,不关闭旧的Image那么将阻止新Image的可用性。往往抛出IllegalStateException。这里不清楚这个一或多具体指的什么。初步估计是多张Image,理由是,在ImageReader中可以设置mMaxImages,而且也建议是2张。通从被人的代码中猜测的,代码如下:

img = imageReader.acquireLatestImage();

if (img != null) {

Image.Plane[] planes = img.getPlanes();

if (planes[0].getBuffer() == null) {

return;

}

....

}

????对于方法的话基本都是抽象方法。也不太好翻译,主要是晓不到如何下手。把几个公共的方法和获取流的方法记录一下。

????setTimestamp( )

20111009145816.jpg

????getCropRect( )

????获取关联的裁剪矩形。

????setCropRect( )

????设置相关联的裁剪矩形。

????getPlanes( )

????获取此图像的像素平面阵列。 平面的数量由图像的格式决定。 如果图像格式为PRIVATE ,则应用程序将获得一个空数组,因为图像像素数据不可直接访问。 应用程序可以通过调用getFormat()来检查图像格式。

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-58101-5.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值