私の前の質問Crop and Scale CMSampleBufferRefの後に、そのCMSampleBufferRefの中のCGContextを修正する方法を見つけました。次のコードを使って、CGContextの四角形、パス、円、およびクリアの矩形を描くことができました。 :CGContextを切り抜くCGContext - iOS
- (void)modifyImage:(CMSampleBufferRef) sampleBuffer {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
// Lock the image buffer
CVPixelBufferLockBaseAddress(imageBuffer,0);
// Get information about the image
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
// Create a CGImageRef from the CVImageBufferRef
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGContextSaveGState(context);
CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextFillRect(context, CGRectMake(0, 0, 400, 400));
//restore the context and remove the clipping area.
CGContextRestoreGState(context);
// We unlock the image buffer
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
// We release some components
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return;
}
は今、私がやりたいことはトリミングしてから、このCGContextをスケーリングすることで、私はCGContextClipToRect(context, CGRectMake(0, 0, 360, 640));
とCGContextScaleCTM(context, 2, 2);
ではなく、成功してみました。
は、誰もがここに
私はCVContextRefを変更し、その新しいCVContextRefで新しいCMSampleBufferRefを再作成することを意味しますか? – vodkhang
こんにちは、あなたの提案をどうすればいいですか?あなたはサンプルコードを持っていますか、私はしばらくの間研究した後、これが本当に必要です – vodkhang