0

假设我有一个由 CFMutableBitVector 表示的图像。这意味着每一个 0 位代表一个关闭像素,每一个 1 位代表一个开启像素。

有没有一种方法可以轻松快速地将这个 CFMutableBitVector 转换为一个低级整数数组,其中一个位表示一个全位整数,一个位表示一个全位整数?

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

将转化为:

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

现在,这是来自视频流的图像,这必须很快发生——在 Objective-C 中进行这种转换的最快方法是什么?

4

1 回答 1

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 );
于 2012-08-31T08:56:41.550 回答