私はiOS用のOpenGL ESについて研究しています。 YUV形式のデータはRGBを変換せずに表示できますか? ほとんどの場合、yuvデータは表示用にRGBを変換する必要があります。しかし、変換プロセスは非常に遅いです、その後、それは円滑に表示されません。 私はRGBに変換せずにYUVデータを表示しようとしたいと思います。 可能ですか?可能であれば、私は何ができますか? お願いします。OpenGL ESでrgbを変換せずにyuv形式のデータを表示する方法は?
答えて
OpenGL ESではRGBデータに変換せずにYUVデータを表示することはできないと思います。
これは、OpenGL ES 2.0シェーダを使用して非常に簡単に行うことができます。私はsuper-fast iOS camera app SnappyCamのためにこのテクニックを使用します。フラグメントシェーダは、行列の乗算を実行して、YCbCr
( "YUV
")からRGB
に移動します。それぞれの{Y, Cb, Cr}
チャンネルを別のGL_LUMINANCE
テクスチャに設定するか、またはGL_LUMINANCE_ALPHA
テクスチャを使用して{Cb, Cr}
テクスチャを組み合わせて、クロミナンスデータが既にインターリーブされている場合(Appleはこれを2面フォーマットと呼びます)。
質問への私の関連する回答を参照してください。YUV to RGBA on Apple A4, should I use shaders or NEON?ここStackOverflowで。
また、ES 1.1の固定レンダリングパイプラインを使用してこれを行うこともできますが、試していません。私は、テクスチャブレンディング関数を見てみましょう。 given in this OpenGL Texture Combiners Wiki Page.
あなたはIOS、iPhoneアプリケーションのソリューションを探していますか?解決策はありますか?あなたは、私は他の人に提供することができ、モバイルデバイスを探している場合は、ビデオのピクセルタイプがkCVPixelFormatType_420YpCbCr8BiPlanarFullRange
-(UIImage *) imageFromSamplePlanerPixelBuffer:(CMSampleBufferRef) sampleBuffer{
@autoreleasepool {
// Get a CMSampleBuffer's Core Video image buffer for the media data
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
// Lock the base address of the pixel buffer
CVPixelBufferLockBaseAddress(imageBuffer, 0);
// Get the number of bytes per row for the plane pixel buffer
void *baseAddress = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0);
// Get the number of bytes per row for the plane pixel buffer
size_t bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer,0);
// Get the pixel buffer width and height
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
// Create a device-dependent gray color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// Create a bitmap graphics context with the sample buffer data
CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8,
bytesPerRow, colorSpace, kCGImageAlphaNone);
// Create a Quartz image from the pixel data in the bitmap graphics context
CGImageRef quartzImage = CGBitmapContextCreateImage(context);
// Unlock the pixel buffer
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
// Free up the context and color space
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
// Create an image object from the Quartz image
UIImage *image = [UIImage imageWithCGImage:quartzImage];
// Release the Quartz image
CGImageRelease(quartzImage);
return (image);
}
}
として設定されている場合
これは仕方UIImageにCMSampleBufferRefに変換されます。
- 1. OpenGL esシェーダを使用してYUVをRGBに変換する
- 2. C/C++でRGB→YUV変換を実行する方法は?
- 3. Cocoa OpenGLプログラムで生のYUVフレームを表示する方法
- 4. android - YUV NV12 to RenderScriptでのRGB変換
- 5. OpenCVでYUVをBGRまたはRGBに変換する
- 6. 生のrgbイメージをHTML形式で表示するには
- 7. DataTableの表示データ形式を2次元形式に変換する
- 8. RGBからYUV(YCoCg)への色変換
- 9. XML形式のデータをRaw形式のデータに変換する方法
- 10. アンドロイドで表形式でデータを表示する方法は?
- 11. OpenGL ES for iPhoneでビデオを表示する方法は?
- 12. OpenGL ESのテクスチャをCIImageに変換する方法
- 13. "background-color"をrgb()形式に変換するには?
- 14. XML形式を別の形式に変換する方法は?
- 15. RGB(2-Dマトリックス)の形式で画像を変換する方法
- 16. C#でYUV 4:2:2をRGBに変換しますか?
- 17. アンドロイド - NV12 yuvをRGBに変換するレンダスクリプト
- 18. iPhone/iPadキーボードをフルスクリーンで表示する方法OpenGL ESアプリ
- 19. json形式でデータを表示する方法は?
- 20. 日付形式はデータ形式で変換できません
- 21. rds形式のデータをR形式のshp形式に変換するには?
- 22. RGBからYUVへの変換がありません
- 23. 日付形式を別の形式に変換する方法
- 24. []形式のリストを()形式に変換する方法
- 25. OpenGL ESのベクトル変換
- 26. YUVからRGBへの変換と表示は、シェイダーを使用してandroid ndkから
- 27. GridViewでjson形式のデータを表示する方法
- 28. RTFデータをHTML形式に変換する方法
- 29. オブジェクト形式をjson形式に変換する方法
- 30. RGB方式を変換しますか?