在C中从float转换为unsigned char

时间:2012-10-14 21:06:28

标签: c image floating-point char unsigned

我试图在一个介于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

1 个答案:

答案 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之间的范围。