【发布时间】:2020-05-14 20:08:13
【问题描述】:
我正在尝试将 YUV 图像转换为灰度,所以基本上我只需要 Y 值。 为此,我编写了一小段代码(frame 是 YUV 图像):
imageConversionTime = System.currentTimeMillis();
size = frame.getSize();
byte nv21ByteArray[] = frame.getImage();
int lol;
for (int i = 0; i < size.width; i++) {
for (int j = 0; j < size.height; j++) {
lol = size.width*j + i;
yMatrix.put(j, i, nv21ByteArray[lol]);
}
}
bitmap = Bitmap.createBitmap(size.width, size.height, Bitmap.Config.ARGB_8888);
Utils.matToBitmap(yMatrix, bitmap);
imageConversionTime = System.currentTimeMillis() - imageConversionTime;
但是,这大约需要 13500 毫秒。我需要它更快(在我的计算机上,python 需要 8.5 毫秒)(我在摩托罗拉 Moto E 4G 第二代上工作,不是超级强大,但它应该足以转换图像吧?)。
有什么建议吗?
提前致谢。
【问题讨论】:
-
除非您想深入了解 OpenGL 着色器,否则请查看 Android RenderScript,因为示例(RGB 到灰度 RGB)与您想要做的类似。确实需要对 C 有一定的了解,因为 RenderScript 是 C99。
-
我会看看 OpenGL。谢谢你的回答。
标签: android performance image-processing optimization