我正在使用JNI,并且有一个jbyte类型的数组,其中jbyte表示为有符号字符,即范围从-128到127。这些jbytes表示图像像素。对于图像处理,我们通常希望像素分量的范围为0到255。因此,我想将jbyte值转换为范围在0到255之间(即与unsigned char相同的范围),对该值进行一些计算,然后再次将结果存储为jbyte。
如何安全地进行这些转换?
我设法使这段代码起作用,其中像素值增加了30,但被限制为值255,但我不知道它是否安全或可移植:
```c++ jbyte* data = env->GetByteArrayElements(jByteArray, 0); for (int i = 0; i < size; ++i) { int tmp = data[i] & 0xff; tmp += 30; if (tmp > 255) { tmp = 255; } data[i] = static_cast(tmp); } env->ReleaseByteArrayElements(jByteArray, data, 0); ``` #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)))
。 - qbert220