java - 如何将此代码从 java 移至 Renderscript

标签 java android android-permissions renderscript android-renderscript

有人可以为我提供一些关于如何将此代码移植到 renderscript 以获得更好性能的指南吗?

private void someMethod() {
 for (int i = 0; i < src.rows(); i++) {
  for (int j = 0; j < src.cols(); j++) {
   double hsv[] = src.get(i, j);
   double modifedHSV[] = this.modifyHSV(new Scalar(hsv), selectedRepaintColor, mean);
   res.put(i, j, modifedHSV);
  }
 }
}
private double[] modifyHSV(Scalar hsvImage, Scalar selectedHsv, Scalar mean) {

 Double h_final = hsvImage.val[0] - mean.val[0] + selectedHsv.val[0];
 Double s_final = hsvImage.val[1] - mean.val[1] + selectedHsv.val[1];
 Double v_final = hsvImage.val[2] - mean.val[2] + selectedHsv.val[2];

 h_final = (h_final <= 0) ? h_final + 180 : h_final;
 s_final = (s_final <= 0) ? 0 : s_final;
 v_final = (v_final <= 0) ? 0 : v_final;

 double[] final_hsv = new double[3];
 final_hsv[0] = h_final;
 final_hsv[1] = s_final;
 final_hsv[2] = v_final;
 return final_hsv;
}

最佳答案

你可以尝试这样的事情:

hsv.rs:

#pragma rs_fp_relaxed
float3 mean;
float3 selectedHsv;
float3 RS_KERNEL process_hsv(float3 input) {
    float3 hsv_final = input - mean + selectedHsv;

    hsv_final.x = (hsv_final.x <= 0.f) ? hsv_final.x + 180.f : hsv_final.x;
    hsv_final.y = (hsv_final.y <= 0.f) ? 0.f : hsv_final.y;
    hsv_final.z = (hsv_final.z <= 0.f) ? 0.f : hsv_final.z;

    return hsv_final;
}

java:

ScriptC_hsv script;
void init() {
    script = new ScriptC_hsv(rs);
}
float[] process_hsv(float[] input_array, Float3 selectedHsv, Float3 mean) {
    script.set_mean(mean);
    script.set_selectedHsv(selectedHsv);
    output_array = new float[size];
    Type t = Type.createXY(rs, Element.F32_3(rs), columns, rows);
    Allocation input = Allocation.createTyped(rs, t, size, Allocation.USAGE_SCRIPT);
    Allocation output = Allocation.createTyped(rs, t, size, Allocation.USAGE_SCRIPT);
    input.copyFrom(input_array);
    script.forEach_process_hsv(input, output);
    output.copyTo(output_array);
    return output_array;
}

关于java - 如何将此代码从 java 移至 Renderscript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45056028/

相关文章:

java - 如何将此自定义 MD5 Java 函数转换为 JavaScript

java - 有多少不必要的 java ArrayList 对象会影响应用程序或内存?

android - openlayers 到 native android 应用程序

android - 如何通过代码编程获取设备的 IMEI/ESN 号码 但是在 android > 6

java - 全屏和窗口模式 Jframe

java - 在浏览器上打印多个空格时出现 java.io.PrintWriter 问题

android - `com.example.**` 和 `com.example.**{*;}` 之间的区别是什么?

android - 帮助我的第一个 Android UI

android - Google Map V2 - EXTERNAL_STORAGE 权限对于 Android 6.0 以上版本是可选的吗?

android - 调用需要 API 级别 23(当前最小值为 14) : android. app.Activity#requestPermissions,checkSelfPermission