2012-08-31 14 views
0

比方說,我有一個由CFMutableBitVector表示的圖像。這意味着有0位表示關閉像素,每1位表示一個開啓像素。Objective-C CFMutableBitVector來輸入

有沒有一種方法可以輕鬆快速地將此CFMutableBitVector轉換爲低位數字的整數,其中on-bit表示全位整數,off-bit表示全零位整數?

的CFMutableBitVector [0,0,0,1,1,0,1,0];

將轉化:

int[8] = 
[ 
    00000000000000000000000000000000, 
    00000000000000000000000000000000, 
    00000000000000000000000000000000, 
    11111111111111111111111111111111, 
    11111111111111111111111111111111, 
    00000000000000000000000000000000, 
    11111111111111111111111111111111, 
    00000000000000000000000000000000, 
]; 

現在,這是從視頻流的圖像,這將有發生非常迅速 - 什麼是做這樣一個最快的方法Objective-C中的轉換?

回答

2

這裏的採樣轉換...

u_int32_t sample = UINT32_MAX; 
    CFBitVectorRef bv = CFBitVectorCreate(NULL, (const u_int8_t *)&sample, sizeof(u_int32_t) * 8); 

    CFIndex bitCount = CFBitVectorGetCount(bv); 
    u_int32_t *a = malloc(bitCount * sizeof(u_int32_t)); 
    for (CFIndex i = 0 ; i < bitCount ; i++) { 
    a[i] = CFBitVectorGetBitAtIndex(bv, i) * UINT32_MAX; 
    } 

    for (int i = 0 ; i < bitCount ; i++) { 
    NSLog(@"Index: %d Number: %u", i, a[i]); 
    } 
    free(a); 
+0

請問,爲什麼使用u_int32_t的?這是爲了確保所有編譯器使用相同大小的int ...? –

+0

因爲你確實想在你的例子中設置32位,所以'u_int32_t'保證你將得到32位的無符號整數。隨意將「UINT32_MAX」和「u_int32_t」更改爲更適合您需求的任何內容。 – robertvojta

+0

噢,不,這是完美的,我只是想知道! –