如何使用RenderScript裁剪图像?

时间:2015-03-15 20:49:42

标签: java android crop renderscript

我希望能够使用RenderScript裁剪图像。这是我的裁剪功能:

uchar4 __attribute__((kernel)) crop(const uchar4 in, uint32_t x, uint32_t y){
    int minX = centerX - cropWidth;
    int maxX = centerX + cropWidth;

    int minY = centerY - cropHeight;
    int maxY = centerY + cropHeight;
    uchar4 out = in;

    if((minX < x < maxX ) && (minY < y < maxY)){
        return out;
    }
    else{
      out.r = 0;
      out.g = 0;
      out.b = 255;
      return out;
    }
}

这是理想的逻辑:
如果像素不在IF条件中指定的X Y范围内,那么我希望该像素为蓝色。

出于某种原因,无论我的界限有多严格,像素的 none 都是蓝色的。有人能解释一下为什么会这样吗?以及如何解决它? 如果我将IF条件替换为false(if(false),那么它保证执行ELSE代码),那么所有像素都是蓝色的(如预期的那样)。

1 个答案:

答案 0 :(得分:2)

minX < x < maxX

没有像你期望的那样工作。该代码正在做的是首先检查是否minX < x,然后将结果布尔值转换为整数(将为0或1),最后检查该整数是否小于maxX(它将始终是)。 (同样的事情发生在y上)。您需要重写该检查,如:

(minX < x && x < maxX ) && (minY < y && y < maxY)