如何使用 RenderScript 裁剪图像?
How do I crop an image using 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 条件替换为假(if(false)
,因此它保证执行 ELSE 代码),那么所有像素都是蓝色的(如预期的那样)。
minX < x < maxX
没有按照您期望的方式工作。该代码所做的是首先检查是否 minX < x
,然后将生成的布尔值转换为整数(将是 0 或 1),最后检查该整数是否小于 maxX
(它将始终是)。 (y
也发生了同样的事情)。您需要像这样重写该支票:
(minX < x && x < maxX ) && (minY < y && y < maxY)
我希望能够使用 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 条件替换为假(if(false)
,因此它保证执行 ELSE 代码),那么所有像素都是蓝色的(如预期的那样)。
minX < x < maxX
没有按照您期望的方式工作。该代码所做的是首先检查是否 minX < x
,然后将生成的布尔值转换为整数(将是 0 或 1),最后检查该整数是否小于 maxX
(它将始终是)。 (y
也发生了同样的事情)。您需要像这样重写该支票:
(minX < x && x < maxX ) && (minY < y && y < maxY)