【发布时间】:2017-08-21 23:10:01
【问题描述】:
我正在尝试在 LED 矩阵中显示图像/视频,该矩阵具有可以打开或关闭的 LED。因此,我需要将任何图像转换为其二进制(0/1 或真/假)格式,以将值提供给 LED 矩阵。这是通过 Android 应用程序完成的。
您能建议一种快速有效的方法吗?我知道这样做的迭代方式,即
1) 嵌套循环扫描原始位图的高度和宽度
2) 从每个 Pixel 元素中获取 R、G、B 值,并使用一些公式将其与阈值进行比较。 (R+G+B > THRESHOLD 或者灰度公式 0.299R + 0.587G + 0.114B> THRESHOLD)
这个方法确实有效。但是,这非常缓慢。转换一个位图大约需要 2 秒。当我尝试转换具有多个帧(和相应的位图)的视频时,即使是 10 秒的视频也需要很长时间。另一个问题是处理器总是被处理的数据量阻塞。即使将计算放在线程上,我也会收到“丢帧”错误。
必须有更快的方法来做到这一点,因为大多数相机应用程序都提供实时图像过滤器。
确切地说,我需要一种方法来获取位图并获得其二进制等效项。
为了节省内存,最好将结果存储在字节流/数组中。否则,布尔/整数变量每个像素占用一个完整字节。这乘以帧中的像素数和帧数只会占用太多内存,特别是如果我尝试并行线程来完成它。
希望有人能帮我解决这个问题。
【问题讨论】:
-
你的
Bitmaps 有多大? -
您可以使用
Bitmap.copyPixelsToBuffer将其存储在Buffer。 -
@pskink 我正在使用 Bitmap.createScaledBitmap 将我的位图缩放到 358x358(这是我真正的 LED 矩阵的大小)。然后转换开始。所以不是一个巨大的图像。仍然需要 2-3 秒。
-
我在模拟器上使用了 1280 x 1280 位图,转换需要 15-20 毫秒
-
@Shreyash S Sarnayak 那会完成什么?它仍然将相同的位图存储到缓冲区而不转换为二进制(0/1)图像,对吗?呃..我在这里遗漏了一些明显的观点吗?我对 android 编程很陌生..
标签: android performance bitmap type-conversion processing-efficiency