私は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. OpenCVでYUVをBGRまたはRGBに変換する
- 5. アンドロイドで表形式でデータを表示する方法は?
- 6. "background-color"をrgb()形式に変換するには?
- 7. C#でYUV 4:2:2をRGBに変換しますか?
- 8. OpenGL ES for iPhoneでビデオを表示する方法は?
- 9. OpenGL ESのテクスチャをCIImageに変換する方法
- 10. 日付形式を別の形式に変換する方法
- 11. RTFデータをHTML形式に変換する方法
- 12. データをJSON形式に変換する
- 13. RGB方式を変換しますか?
- 14. iPhone/iPadキーボードをフルスクリーンで表示する方法OpenGL ESアプリ
- 15. YUVからRGBへの変換と表示は、シェイダーを使用してandroid ndkから
- 16. Androidで表形式のデータを表示
- 17. Rのデータ形式を変換する
- 18. jspでデータを表形式で表示
- 19. OpenGL ESのベクトル変換
- 20. DirectShow RGB-YUVフィルタ
- 21. jpegがRGB形式かCMYK形式かを確認する方法は?
- 22. SQL Serverのクエリ結果のデータをJSON形式に変換する方法は?
- 23. xpath:次のXMLを結果のデータ形式に変換する方法は?
- 24. このデータ形式をJSONに変換する方法の例は?
- 25. JSONP形式をJSON形式に変換する方法はありますか?
- 26. 角度材質のangularjsで表形式のデータを表示する方法
- 27. xsltでGMT形式にdateTimeを表示する方法は?
- 28. タブファイルのデータをCSV形式に変換するか、Javaを使用して形式を変換する
- 29. ListViewをアンドロイドの表形式で表示する方法
- 30. SVGをSHP(シェイプファイル)形式に変換する方法は?