android13/packages/apps/DisplayAdjust/src/com/rockchip/graphics/CubicLutUtil.java

115 lines
4.0 KiB
Java
Executable File

package com.rockchip.graphics;
import android.content.Context;
import android.content.res.AssetManager;
import java.io.File;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class CubicLutUtil {
private static int floatLutToIntLut(float value) {
int ret = (int) (4096 * value + 0.5);
if (ret >= 4096)
ret = 4095;
return ret;
}
public static int[][] get3DLutFromFile(String path) {
int[][] ret = null;
try {
File file = new File(path);
if(!file.exists()){
return null;
}
FileReader fileReader = new FileReader(file);
LineNumberReader reader = new LineNumberReader(fileReader);
String txt = "";
String[] temp = null;
int lines = 0;
int i = 0;
boolean is3DLutData = false;
while (txt != null) {
lines++;
txt = reader.readLine();
if (txt.startsWith("Length")) {
int length = Integer.parseInt(txt.replaceAll("\\s+", "").replaceAll("Length", ""));
ret = new int[3][length * length * length];
continue;
}
if (txt.equals("{")) {
is3DLutData = true;
continue;
} else if (txt.equals("}")) {
is3DLutData = false;
break;
}
if (is3DLutData && ret != null) {
temp = txt.trim().split(" ");
ret[0][i] = floatLutToIntLut(Float.parseFloat(temp[0]));
ret[1][i] = floatLutToIntLut(Float.parseFloat(temp[1]));
ret[2][i] = floatLutToIntLut(Float.parseFloat(temp[2]));
i++;
}
}
reader.close();
fileReader.close();
if(ret != null && i != ret[0].length){
ret = null;
}
} catch (Exception e) {
e.printStackTrace();
ret = null;
}
return ret;
}
public static int[][] get3DLutFromAsset(Context context, String fileName) {
int[][] ret = null;
try {
AssetManager am = context.getResources().getAssets();
InputStreamReader inputReader = new InputStreamReader(am.open(fileName));
LineNumberReader reader = new LineNumberReader(inputReader);
String txt = "";
String[] temp = null;
int lines = 0;
int i = 0;
boolean is3DLutData = false;
while (txt != null) {
lines++;
txt = reader.readLine();
if (txt.startsWith("Length")) {
int length = Integer.parseInt(txt.replaceAll("\\s+", "").replaceAll("Length", ""));
ret = new int[3][length * length * length];
continue;
}
if (txt.equals("{")) {
is3DLutData = true;
continue;
} else if (txt.equals("}")) {
is3DLutData = false;
break;
}
if (is3DLutData) {
temp = txt.trim().split(" ");
ret[0][i] = floatLutToIntLut(Float.parseFloat(temp[0]));
ret[1][i] = floatLutToIntLut(Float.parseFloat(temp[1]));
ret[2][i] = floatLutToIntLut(Float.parseFloat(temp[2]));
i++;
}
}
reader.close();
inputReader.close();
if(ret != null && i != ret[0].length){
ret = null;
}
} catch (Exception e) {
e.printStackTrace();
ret = null;
}
return ret;
}
}