データでいっぱいの originalFrame と呼ばれる CGImageRef があります。それを使用して、私は次のことをしたいと思います:
- 画像をグレースケールにする
- 画像を回転する
- 画像をトリミングする
- 結果のピクセル データを外部ライブラリにフィードする
ただし、そうすると、何をしても、ピクセルバッファーは完全に空になります。
// Convert to grayscale, translate, rotate, crop.
CGColorSpaceRef graySpace = CGColorSpaceCreateDeviceGray();
uint8_t *croppedData = (uint8_t *)malloc( sizeof(uint32_t)*CROPPED_WIDTH*CROPPED_HEIGHT );
memset( croppedData, 0, sizeof(uint32_t)*CROPPED_WIDTH*CROPPED_HEIGHT );
context = CGBitmapContextCreate( croppedData, CROPPED_WIDTH, CROPPED_HEIGHT, 8, height*sizeof(uint32_t), graySpace, kCGImageAlphaNoneSkipFirst );
CGContextClipToRect(context, CGRectMake( 0, 0, CROPPED_WIDTH, CROPPED_HEIGHT ) );
CGContextTranslateCTM( context, 0, width );
CGContextRotateCTM( context, -M_PI/2 );
CGContextDrawImage( context, CGRectMake( 0, 0, width, height ), originalFrame );
CGImageRef tempDisplayImage = CGBitmapContextCreateImage( context );
[self.displayLayer performSelectorOnMainThread:@selector(setContents:) withObject:(id)tempDisplayImage waitUntilDone:YES];
CGImageRelease( tempDisplayImage );
CGContextRelease( context );
CGColorSpaceRelease( graySpace );
CGImageRelease( originalFrame );
displayLayer に正しい画像が表示されているため、移動、回転、トリミングが機能していることがわかります。コンテキストが適切に画像を描画しているにもかかわらず、croppedData バッファが空のままである理由はありますか?