- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 AVFoundation 拍摄视频,并以 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
格式录制。我想直接从 YpCbCr 格式的 Y 平面制作灰度图像。
我尝试通过调用 CGBitmapContextCreate
创建 CGContextRef
,但问题是,我不知道要选择什么颜色空间和像素格式。
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer,0);
/* Get informations about the Y plane */
uint8_t *YPlaneAddress = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0);
size_t bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer, 0);
size_t width = CVPixelBufferGetWidthOfPlane(imageBuffer, 0);
size_t height = CVPixelBufferGetHeightOfPlane(imageBuffer, 0);
/* the problematic part of code */
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef newContext = CGBitmapContextCreate(YPlaneAddress,
width, height, 8, bytesPerRow, colorSpace, kCVPixelFormatType_1Monochrome);
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
UIImage *grayscaleImage = [[UIImage alloc] initWithCGImage:newImage];
// process the grayscale image ...
}
当我运行上面的代码时,出现以下错误:
<Error>: CGBitmapContextCreateImage: invalid context 0x0
<Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 16 bits/pixel; 1-component color space; kCGImageAlphaPremultipliedLast; 192 bytes/row.
PS:抱歉我的英语。
最佳答案
如果我没记错的话,你不应该通过CGContext
。相反,您应该创建一个数据提供程序,然后直接创建图像。
代码中的另一个错误是使用了kCVPixelFormatType_1Monochrome
常量。它是视频处理(AV 库)中使用的常量,而不是 Core Graphics(CG 库)中使用的常量。只需使用 kCGImageAlphaNone 即可。每个像素需要一个分量(灰色)(而不是 RGB 的三个分量),这是从颜色空间得出的。
它可能看起来像这样:
CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, YPlaneAdress,
height * bytesPerRow, NULL);
CGImageRef newImage = CGImageCreate(width, height, 8, 8, bytesPerRow,
colorSpace, kCGImageAlphaNone, dataProvider, NULL, NO, kCGRenderingIntentDefault);
CGDataProviderRelease(dataProvider);
关于iphone - AVFoundation - 从 Y 平面获取灰度图像 (kCVPixelFormatType_420YpCbCr8BiPlanarFullRange),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10163462/
iphone 3gs 相机的原生色彩空间是 YpCbCr 4:2:0。我计划在 opengl 中做很多亮度处理(虽然我也会做一些颜色)。有没有一种让框架进入opengl的有效方法? 我已经成功使用 G
我试图在 iPhone 4 上的 iOS 4.3 中将原生平面图像渲染为 OpenGL ES 2.0 纹理。然而,纹理最终变成全黑。我的相机配置如下: [videoOutput setVideoSet
我是一名优秀的程序员,十分优秀!