Я работаю с JNI и имею массив типа jbyte, где jbyte представлен как подписанный char i.e. от -128 до 127. jbytes представляют пиксели изображения. Для обработки изображений мы обычно хотим, чтобы компоненты пикселей находились в диапазоне от 0 до 255. Поэтому я хочу преобразовать значение jbyte в диапазон от 0 до 255 (то есть в том же диапазоне, что и без знака char), выполнить некоторые вычисления по значению, а затем снова сохраните результат как jbyte.
Как я могу сделать это преобразование безопасно?
Мне удалось заставить этот код работать, где значение пикселя увеличивается на 30, но привязывается к значению 255, но я не понимаю, безопасно ли оно или переносимо:
#define CLAMP255(v) (v > 255 ? 255 : (v < 0 ? 0 : v))
jbyte pixel = ...
pixel = CLAMP_255((unsigned char)pixel + 30);
Мне интересно знать, как это сделать как на C, так и на С++.