0

画像を処理するために、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

他の方法を試しましたが、うまくいきません。

あなたへの私の質問は次のとおりです。フロートと符号なし文字の間で変換するにはどうすればよいですか?

編集:正しい出力を生成したコードは次のとおりです。

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

4

1 に答える 1

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

float が 0 から 1 の範囲にない場所が表示されます。

于 2012-10-14T21:13:42.320 に答える