0

データでいっぱいの 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 バッファが空のままである理由はありますか?

4

0 に答える 0