干货分享---你绝对想知道的-Totoro-截图及图像技术体系

本文介绍了Android截图的性能优化,通过调整截图格式和压缩质量,将截图时间从2-5s降低到200-800ms。此外,为了解决安全限制下的截图问题,文章探讨了自研的SurfaceControl录屏方案和minicap兜底方案,实现了截图的全面覆盖。这两种方法结合使用,确保了在不同设备和安全场景下的截图稳定性。
摘要由CSDN通过智能技术生成

同样发现,UIAutomator 提供默认截图方法 生成图片文件也是非常大,压缩算法并没生效。导致截图链路上整体耗时会造成每次截图在平均 2-5s 左右,影响到了自动化整体时间。 考虑到单独引进一套压缩算法较重,且可能后续无资源维护,所以决定研究安卓源码,试图从根本解决压缩无效的问题。

/**

  • Write a compressed version of the bitmap to the specified outputstream.
  • If this returns true, the bitmap can be reconstructed by passing a
  • corresponding inputstream to BitmapFactory.decodeStream(). Note: not
  • all Formats support all bitmap configs directly, so it is possible that
  • the returned bitmap from BitmapFactory could be in a different bitdepth,
  • and/or may have lost per-pixel alpha (e.g. JPEG only supports opaque
  • pixels).
  • @param format The format of the compressed image
  • @param quality Hint to the compressor, 0-100. 0 meaning compress for
  •             small size, 100 meaning compress for max quality. Some
    
  •             formats, like PNG which is lossless, will ignore the
    
  •             quality setting
    
  • @param stream The outputstream to write the compressed data.
  • @return true if successfully compressed to the specified stream.
    */
    public boolean compress(CompressFormat format, int quality, OutputStream stream) {

    }

public boolean takeScreenshot(File storePath, int quality) {
Bitmap screenshot = mUiAutomation.takeScreenshot();

BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(storePath));
screenshot.compress(Bitmap.CompressFormat.PNG, quality, bos);
}

return true;
}

根据以上安卓源码,跟踪到系统压缩方法。看注释,似乎发现了问题所在,看 takeScreenshot 方法, 调用了 Bitmap 的 Compress 压缩方法,传的参数写死了 Bitmap.CompressFormat.PNG,格式,根据注释说明,Compress 方法又对 png 格式图片的压缩忽略的,所以导致获取到的图片都很大。马上重写系统方法,直接调用压缩方法,传入 JPEG 去验证可行性,马上得出了解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值