我正在创建一个需要一些非常大的查找表的图像处理应用程序。目前,我将表保存为应用程序的resources / raw目录中的.txt文件,作为3x4913值的数组(3表示R,G,B)。在应用程序启动时加载所有这些(9)LUT需要非常慢的25秒或更长时间。
我的同事建议我将LUT数据保存为图像本身,以png格式保存,我已经完成,生成了9个宽度为1,高度为4913的不同图像。我将它们放在drawable文件夹中并尝试解码它们使用BitmapFactory.decodeResource(),适用于任何其他可绘制而无错误。当我使用LUT图像并在调试器中单击“查看位图”时,它会显示:
“评估表达式时出错:方法抛出'Java.Lang.IllegalArgumentExpression'异常”
我甚至尝试过使用一些BitmapFactory选项但结果相同:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
options.outHeight = 4913;
options.outWidth = 1;
// Error here
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), lutIds[n], options);
bitmap.getPixels(pixels, 0, 1, 0, 0, 1, 4913);
有什么建议吗?或者,任何想法我怎么能在每次应用程序启动时快速加载数据。每个数字的最大值为255,因此可以短时间存储。
谢谢!
注意:LUT png在任何图像查看软件中都显示正常
答案 0 :(得分:0)
更新
事实证明,这一切都正常,唯一的问题是Android Studio在调试过程中拒绝显示某些大小的位图。菜鸟错误!
对于那些感兴趣的人,从.txt文件加载数据在我的手机(Xperia Z3)上花了大约28-30秒,而使用python将数据转换为png并加载png则需要0.1秒!