2012-10-14 5 views
0

0과 1 사이의 double과 이미지 처리를위한 unsigned char 사이를 변환하려고합니다.C에서 float에서 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 

: 나는이 other methods을 시도

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 

,하지만 그들은 작동하지 않습니다.

내 질문은 : float와 unsigned char 사이의 변환 방법은 무엇입니까?

편집 : 내가 한 모든 편집은

1 
2 
3 
4 

대신 1,2,3,4했다 있도록 출력했다

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]); 
} 

: 올바른 출력을 생성 된 코드는 다음입니다.

+0

그것은 변환하는 의미이다 float와 unsigned char 사이에 더 많은 정보가 없습니다. 그것이 어떻게 개종 할 것으로 기대합니까? 정수로 반올림 된 값으로? 실제 캐릭터? – Joe

+0

게시 한 출력에 대한 입력은 무엇입니까? – Dani

+0

@Dani :이 값의 입력 값은 UIColor에서 가져온 RGB 값입니다. 난 원시 배열에 내 모든 데이터를 가지고, C 배열과 UIImage 사이의 변환에'float'과'unsigned char' 사이의 변환을 시도하고 있습니다. – Scott

답변

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.

관련 문제