Products | Support | Email a link to this topic. | Send comments on this topic. | Back to Introduction - All Topics | Help Version 19.0.11.2
|
Leadtools.ColorConversion Namespace > ConversionParameters Class : YuvParameters Property |
public ConversionYuvParameters YuvParameters {get; set;}
'Declaration Public Property YuvParameters As ConversionYuvParameters
'Usage Dim instance As ConversionParameters Dim value As ConversionYuvParameters instance.YuvParameters = value value = instance.YuvParameters
public: property ConversionYuvParameters YuvParameters { ConversionYuvParameters get(); void set ( ConversionYuvParameters value); }
This example will convert a buffer from Yuv to Rgb Color Space.
Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.ColorConversion Public Function GetYuvBufferFromImage(ByVal bgrImage As RasterImage) As Byte() ' StartUp the ColorConversion. RasterColorConverterEngine.Startup() ' Image buffer array Dim bgrBuffer(bgrImage.Width * bgrImage.Height * 3) As Byte ' get image buffer Dim i As Integer For i = 0 To bgrImage.Height bgrImage.GetRow(i, bgrBuffer, (i * bgrImage.Width * 3), bgrImage.Width * 3) Next i ' Initialize a new Converter object Dim converter As New RasterColorConverterEngine() Dim yuvBuffer(bgrBuffer.Length) As Byte Try ' Start the color conversion converter.Start(ConversionColorFormat.Bgr, ConversionColorFormat.Yuv, Nothing) ' convert the image buffer converter.Convert(bgrBuffer, _ 0, _ yuvBuffer, _ 0, _ bgrImage.Width, _ bgrImage.Height, _ 0, _ 0) ' stop the conversion converter.Stop() Catch ex As Exception MessageBox.Show(ex.Message) End Try RasterColorConverterEngine.Shutdown() Return yuvBuffer End Function Public Function GetImageFromYuvBuffer(ByVal yuvBuffer As Byte(), ByVal width As Integer, ByVal height As Integer) As RasterImage ' StartUp the ColorConversion. RasterColorConverterEngine.Startup() ' Initialize a new Converter object Dim Converter As New RasterColorConverterEngine() ' Initialize an image to hold the converted buffer. Dim yuvImage As RasterImage = Nothing Try yuvImage = New RasterImage(RasterMemoryFlags.Conventional, width, height, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, Nothing, IntPtr.Zero, 0) ' Start the color conversion Converter.Start(ConversionColorFormat.Yuv, ConversionColorFormat.Bgr, Nothing) ' convert the image buffer Converter.ConvertToImage(yuvBuffer, _ 0, _ yuvImage, _ width, _ height, _ 0, _ 0) ' stop the conversion Converter.Stop() Catch ex As Exception MessageBox.Show(ex.Message) End Try ' Shutdown the ColorConversion. RasterColorConverterEngine.Shutdown() Return yuvImage End Function <TestMethod()> _ Public Sub YuvParametersExampleExample() ' Startup the RasterCodecs Dim codecs As New RasterCodecs() ' StartUp the ColorConversion. RasterColorConverterEngine.Startup() ' The input file name Dim inputFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp") ' load the input image as Bgr. Dim bgrImage As RasterImage = codecs.Load(inputFileName, 24, CodecsLoadByteOrder.Bgr, 1, 1) Dim width As Integer = bgrImage.Width Dim height As Integer = bgrImage.Height Dim yuvBuffer() As Byte = GetYuvBufferFromImage(bgrImage) ' Initialize the Rgb buffer array Dim rgbBuffer(yuvBuffer.Length) As Byte ' Byte ordering of the format; for Y41P: ' U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y7 ' 0 1 2 3 4 5 6 7 8 9 10 11 ' Put the Y component order first, then the U and V last as follows: ' Y positions: 1,3,5,7,8,9,10,11 ' U positions: 0,4 ' V positions: 2,6 Dim offset() As Integer = {1, 3, 5, 7, 8, 9, 10, 11, 0, 4, 2, 6} ' Initialize a new ConversionParameters class object. Dim convParams As ConversionParameters = New ConversionParameters ' Initialize the YuvParameters class property. Dim yuvParameters As ConversionYuvParameters = ConversionYuvParameters.Empty ' Determine the horizontal sub-sampling of U yuvParameters.UH = 4 ' Determine the vertical sub-sampling of U yuvParameters.UV = 1 ' Determine the horizontal sub-sampling of V yuvParameters.VH = 4 ' Determine the vertical sub-sampling of V yuvParameters.VV = 1 ' Set the byte ordering yuvParameters.Offsets = offset ' The YUV values range yuvParameters.Range = ConversionYuvRange.UseFull ' This represents the macro pixels(smallest group of pixels allowed), ' which indicates how many actual pixels are in the macro pixel. ' This value is important only in non - planar format yuvParameters.MacroPixel = 8 ' This is a Boolean value that represents the type of the YUV format (Planar = true, or non - Planar = false.) yuvParameters.Planar = False convParams.YuvParameters = yuvParameters ' Determine the type of conversion to be used in the conversion, for YUVGeneric, only use UseBuiltIn convParams.Method = ConversionMethodFlags.UseBuiltIn ' Determine the type of conversion to be activated. For YUVGeneric, only UseBuiltIn convParams.ActiveMethod = ConversionMethodFlags.UseBuiltIn ' Initialize a new Converter object Dim converter As New RasterColorConverterEngine Try ' Initialize the conversion converter.Start(ConversionColorFormat.Yuv, ConversionColorFormat.Rgb, convParams) ' Convert the Buffer from Yuv to Rgb converter.Convert(yuvBuffer, 0, rgbBuffer, 0, width, height, 0, 0) ' Change the Yuv Parameters convParams.Method = ConversionMethodFlags.ChangeYuv ' Change the MacroPixel value yuvParameters.Mask = ConversionYuvMaskFlags.MacroPixel ' Reset the MacroPixel Property. yuvParameters.MacroPixel = 16 convParams.YuvParameters = yuvParameters ' Convert the Buffer from Yuv to Rgb converter.Convert(yuvBuffer, 0, rgbBuffer, 0, width, height, 0, 0) ' Stop the conversion converter.Stop() Catch ex As Exception MessageBox.Show(ex.Message) rgbBuffer = Nothing End Try ' the output File Name. Dim outputFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "ResultImage.bmp") ' Save the converted Image Dim yuvImage As RasterImage = GetImageFromYuvBuffer(yuvBuffer, width, height) codecs.Save(yuvImage, outputFileName, RasterImageFormat.Bmp, 24) ' Shutdown the ColorConversion. RasterColorConverterEngine.Shutdown() ' Shutdown the RasterCodecs End Sub Public NotInheritable Class LEAD_VARS Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" End Class
using Leadtools; using Leadtools.Codecs; using Leadtools.ColorConversion; public byte[] GetYuvBufferFromImage(RasterImage bgrImage) { // StartUp the ColorConversion. RasterColorConverterEngine.Startup(); // Image buffer array byte[] bgrBuffer = new byte[bgrImage.Width * bgrImage.Height * 3]; // get image buffer for (int i = 0; i < bgrImage.Height; i++) bgrImage.GetRow(i, bgrBuffer, (i * bgrImage.Width * 3), bgrImage.Width * 3); // Initialize a new Converter object RasterColorConverterEngine converter = new RasterColorConverterEngine(); byte[] yuvBuffer = new byte[bgrBuffer.Length]; try { // Start the color conversion converter.Start(ConversionColorFormat.Bgr, ConversionColorFormat.Yuv, null); // convert the image buffer converter.Convert(bgrBuffer, // input buffer 0, // offset from the begining of the source buffer yuvBuffer, // output buffer 0, // offset from the begining of the destination buffer bgrImage.Width, // pixels width bgrImage.Height, // pixels height 0, // 0 bytes align 0); // 0 bytes align // stop the conversion converter.Stop(); } catch (Exception ex) { MessageBox.Show(ex.Message); } RasterColorConverterEngine.Shutdown(); return yuvBuffer; } public RasterImage GetImageFromYuvBuffer(byte[] yuvBuffer, int width, int height) { // StartUp the ColorConversion. RasterColorConverterEngine.Startup(); // Initialize a new Converter object RasterColorConverterEngine converter = new RasterColorConverterEngine(); // Initialize an image to hold the converted buffer. RasterImage yuvImage = null; try { yuvImage = new RasterImage(RasterMemoryFlags.Conventional, width, height, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, null, IntPtr.Zero, 0); // Start the color conversion converter.Start(ConversionColorFormat.Yuv, ConversionColorFormat.Bgr, null); // convert the image buffer converter.ConvertToImage(yuvBuffer, // converted buffer 0, // offset from the begining of the source buffer yuvImage, // image to be save width, // pixels width height, // pixels height 0, // 0 bytes align 0); // 0 bytes align // stop the conversion converter.Stop(); } catch (Exception ex) { MessageBox.Show(ex.Message); } // Shutdown the ColorConversion. RasterColorConverterEngine.Shutdown(); return yuvImage; } [TestMethod] public void YuvParametersPropertyExample() { // Startup the RasterCodecs RasterCodecs codecs = new RasterCodecs(); // StartUp the ColorConversion. RasterColorConverterEngine.Startup(); // The input file name string inputFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"); // load the input image as Bgr. RasterImage bgrImage = codecs.Load(inputFileName, 24, CodecsLoadByteOrder.Bgr, 1, 1); int width = bgrImage.Width; int height = bgrImage.Height; byte[] yuvBuffer = GetYuvBufferFromImage(bgrImage); // Initialize the Rgb buffer array byte[] rgbBuffer = new byte[yuvBuffer.Length]; //Byte ordering of the format; for Y41P: // U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y7 // 0 1 2 3 4 5 6 7 8 9 10 11 // Put the Y component order first, then the U and V last as follows: // Y positions: 1,3,5,7,8,9,10,11 // U positions: 0,4 // V positions: 2,6 int[] offset = {1,3,5,7,8,9,10,11,0,4,2,6}; // Initialize a new ConversionParameters class object. ConversionParameters convParams = new ConversionParameters(); // Initialize the YuvParameters class property. ConversionYuvParameters yuvParameters = ConversionYuvParameters.Empty; // Determine the horizontal sub-sampling of U yuvParameters.UH = 4; // Determine the vertical sub-sampling of U yuvParameters.UV = 1; // Determine the horizontal sub-sampling of V yuvParameters.VH = 4; // Determine the vertical sub-sampling of V yuvParameters.VV = 1; //Set the byte ordering yuvParameters.Offsets = offset; //The YUV values range yuvParameters.Range = ConversionYuvRange.UseFull; // This represents the macro pixels(smallest group of pixels allowed), // which indicates how many actual pixels are in the macro pixel. // This value is important only in non - planar format yuvParameters.MacroPixel = 8; //This is a Boolean value that represents the type of the YUV format (Planar = true, or non - Planar = false.) yuvParameters.Planar = false; // set the yuv parameters convParams.YuvParameters = yuvParameters; // Determine the type of conversion to be used in the conversion, for YUVGeneric, only use UseBuiltIn convParams.Method = ConversionMethodFlags.UseBuiltIn; //Determine the type of conversion to be activated. For YUVGeneric, only UseBuiltIn convParams.ActiveMethod = ConversionMethodFlags.UseBuiltIn; // Initialize a new Converter object RasterColorConverterEngine converter = new RasterColorConverterEngine(); try { //Initialize the conversion converter.Start(ConversionColorFormat.Yuv, ConversionColorFormat.Rgb, convParams); // Convert the Buffer from Yuv to Rgb converter.Convert(yuvBuffer, 0, rgbBuffer, 0, width, height, 0, 0); // Change the Yuv Parameters convParams.Method = ConversionMethodFlags.ChangeYuv; // Change the MacroPixel value yuvParameters.Mask = ConversionYuvMaskFlags.MacroPixel; // Reset the MacroPixel Property. yuvParameters.MacroPixel = 16; convParams.YuvParameters = yuvParameters; // Convert the Buffer from Yuv to Rgb converter.Convert(yuvBuffer, 0, rgbBuffer, 0, width, height, 0, 0); // Stop the conversion converter.Stop(); } catch (Exception ex) { MessageBox.Show(ex.Message); rgbBuffer = null; } // the output File Name. string outputFileName = Path.Combine(LEAD_VARS.ImagesDir, "ResultImage.bmp"); // Save the converted Image RasterImage yuvImage = GetImageFromYuvBuffer(yuvBuffer, width, height); codecs.Save(yuvImage, outputFileName, RasterImageFormat.Bmp, 24); // Shutdown the ColorConversion. RasterColorConverterEngine.Shutdown(); // Shutdown the RasterCodecs } static class LEAD_VARS { public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; }