为什么不在ImageView中更新TextureView.getBitmap中的位图数据?

时间:2016-05-03 20:41:10

标签: android android-bitmap textureview

我有一段代码在TextureView中显示相机预览。偶尔(假设用户按下按钮)我从TextureView获取位图并将其设置为显示在ImageView中,如下所示:

private void freezeFrame() {
  textureView.getBitmap(freezeBitmap);
  imageView.setImageBitmap(freezeBitmap);
}

预先分配freezeBitmap并在多次调用上述方法时重复使用。

问题是ImageView会一直显示从第一次调用到freezeFrame()的位图状态。致电imageView.invalidate()无济于事。

当我执行以下一个时,问题就会消失:

  • 设置imageView以使用软件层(这使我相信位图是从textureView正确获取的,但未以硬件模式上传到GPU),
  • 在每次调用getBitmap()
  • 时创建一个新位图
  • 修改位图,例如与freezeBitmap.setPixel(0, 0, 0)

所以我想知道:为什么ImageView没有注意到TextureView.getBitmap已经更新了位图,但它确实注意到setPixel()执行了更改? 有没有一种强制更新的好方法?

0 个答案:

没有答案