【发布时间】:2011-02-18 11:47:28
【问题描述】:
我正在使用 JNI,并且有一个 jbyte 类型的数组,其中 jbyte 表示为有符号字符,即范围从 -128 到 127。jbytes 表示图像像素。对于图像处理,我们通常希望像素分量的范围为 0 到 255。因此我想将 jbyte 值转换为 0 到 255 的范围(即与 unsigned char 相同的范围),对值进行一些计算,然后存储结果再次为 jbyte。
如何安全地进行这些转换?
我设法让这段代码工作,其中像素值增加了 30,但限制为值 255,但我不明白它是否安全或可移植:
#define CLAMP255(v) (v > 255 ? 255 : (v < 0 ? 0 : v))
jbyte pixel = ...
pixel = CLAMP_255((unsigned char)pixel + 30);
我很想知道如何在 C 和 C++ 中做到这一点。
【问题讨论】:
-
您可能应该在使用宏的参数时添加括号,如下所示:
#define CLAMP255(v) ((v) > 255 ? 255 : ((v) < 0 ? 0 : (v)))
标签: c++ c java-native-interface