我试图在一个介于0和1之间的double和一个用于处理图像的unsigned char之间进行转换。
到目前为止我所做的是我有一系列花车。
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,但它们无效。
我的问题是:如何在浮点数和无符号字符之间进行转换?
编辑:生成正确输出的代码是:
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
。
答案 0 :(得分:0)
转换此代码:
for (int i=0; i<4*length; i++){
newArray[i] = 255*array[i];
}
到此:
for (int i=0; i<4*length; i++)
{
float f = 255*array[i];
if (f < 0 || f > 255)
{
printf("error, array[%d]=%f, 255*array[%d]=%f\n!", i, array[i], i, f);
abort();
}
newArray[i] = f;
}
它会显示你的浮点数在0到1之间的范围。