Я пытаюсь преобразовать между двойным, который находится между 0 и 1, и неподписанный символ для обработки изображения.Преобразование из float в unsigned char в C
Что я делаю до сих пор, у меня есть массив поплавков.
float array[length*4]
с 4-мя исходящими из системы цветных схем RGBA. Я тогда попробуйте это:
unsigned char newArray[4*length]
for (int i=0; i<4*length; i++){
newArray[i] = 255*array[i];
}
for (int i=0; i<10; i++){
printf("newArray: %d", newArray[i])
}
и получить следующий вывод:
newArray: 32
newArray: 128
newArray: 131
newArray: 0
newArray: 173
newArray: 224
newArray: 56
newArray: 60
newArray: 125
newArray: 104
, когда оно должно быть таким:
should be: 0
should be: 75
should be: 140
should be: 255
should be: 1
should be: 79
should be: 143
should be: 255
should be: 1
should be: 84
should be: 150
should be: 255
Я попытался other methods, но они не работают.
Вопрос к вам: Как преобразовать между поплавком и символом без знака?
EDIT: код, который генерируется правильный вывод заключается в следующем:
for (i=0; i<length; i++) {
[[data objectAtIndex:i] getRed:&red green:&green blue:&blue alpha:&alpha];
array[i][0] = 255*red;
array[i][1] = 255*green;
array[i][2] = 255*blue;
array[i][3] = 255*alpha;
}
for (i=0; i<10; i++) {
NSLog(@"before: %f, %f, %f, %f", array[i][0],array[i][1],array[i][2],array[i][3]);
}
, где все, что я сделал редактировать выходной поэтому был
1
2
3
4
вместо 1,2,3,4
.
Это бессмысленно, чтобы преобразовать между поплавком и без знака без дополнительной информации. Как вы ожидаете, что он будет преобразован? К целочисленному округленному значению? Для фактического персонажа? – Joe
Каков вход для вывода, который вы опубликовали? – Dani
@ Дани: вход для этих значений - значения RGB, взятые из UIColor. У меня есть все мои данные в необработанном массиве, и я пытаюсь преобразовать между 'float' и' unsigned char' для преобразования между массивом C и UIImage. – Scott