我正在使用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);
Run Code Online (Sandbox Code Playgroud)
我很想知道如何在C和C++中做到这一点.