public int MacroPixel { get; set; }
The Macropixel size, which is the number of pixels in the unit pixels group.
using Leadtools;using Leadtools.Codecs;using Leadtools.ColorConversion;using Leadtools.ImageProcessing;public string outputFile = Path.Combine(LEAD_VARS.ImagesDir, "ColorConversion", "YuvParameters.bmp");public void YuvParametersPropertyExample(){using (RasterCodecs codecs = new RasterCodecs()){// StartUp the ColorConversion.RasterColorConverterEngine.Startup();// Load the input image as BGRstring inputFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp");RasterImage bgrImage = codecs.Load(inputFileName, 24, CodecsLoadByteOrder.Bgr, 1, 1);int width = bgrImage.Width;int height = bgrImage.Height;// Get the YUV bufferbyte[] yuvBuffer = GetYuvBufferFromImage(bgrImage);// Initialize the Rgb buffer arraybyte[] 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,6int[] offset = { 1, 3, 5, 7, 8, 9, 10, 11, 0, 4, 2, 6 };// Initialize a new ConversionParametersConversionParameters convParams = new ConversionParameters();// Initialize YuvParametersConversionYuvParameters yuvParameters = ConversionYuvParameters.Empty;yuvParameters.UH = 4; // Horizontal sub-sampling of UyuvParameters.UV = 1; // Vertical sub-sampling of UyuvParameters.VH = 4; // Horizontal sub-sampling of VyuvParameters.VV = 1; // Vertical sub-sampling of VyuvParameters.Offsets = offset; // // Byte orderingyuvParameters.Range = ConversionYuvRange.UseFull; // YUV values range// 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 formatyuvParameters.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 parametersconvParams.YuvParameters = yuvParameters;// Determine the type of conversion to be used in the conversion, for YUVGeneric, only use UseBuiltInconvParams.Method = ConversionMethodFlags.UseBuiltIn;//Determine the type of conversion to be activated. For YUVGeneric, only UseBuiltInconvParams.ActiveMethod = ConversionMethodFlags.UseBuiltIn;// Initialize a new Converter objectRasterColorConverterEngine converter = new RasterColorConverterEngine();//Initialize the conversionconverter.Start(ConversionColorFormat.Yuv, ConversionColorFormat.Rgb, convParams);// Convert the Buffer from Yuv to Rgbconverter.Convert(yuvBuffer, 0, rgbBuffer, 0, width, height, 0, 0);// Change the Yuv ParametersconvParams.Method = ConversionMethodFlags.ChangeYuv;// Change the MacroPixel valueyuvParameters.Mask = ConversionYuvMaskFlags.MacroPixel;// Reset the MacroPixel Property.yuvParameters.MacroPixel = 16;convParams.YuvParameters = yuvParameters;// Convert the Buffer from Yuv to Rgbconverter.Convert(yuvBuffer, 0, rgbBuffer, 0, width, height, 0, 0);// Stop the conversionconverter.Stop();// Save the converted ImageRasterImage yuvImage = GetImageFromYuvBuffer(yuvBuffer, width, height);codecs.Save(yuvImage, outputFile, RasterImageFormat.Bmp, 24);// Shutdown the ColorConversion.RasterColorConverterEngine.Shutdown();}}byte[] GetYuvBufferFromImage(RasterImage bgrImage){// StartUp the ColorConversion.RasterColorConverterEngine.Startup();// Image buffer arraybyte[] bgrBuffer = new byte[bgrImage.Width * bgrImage.Height * 3];// Get image bufferbgrImage.Access();for (int i = 0; i < bgrImage.Height; i++)bgrImage.GetRow(i, bgrBuffer, (i * bgrImage.Width * 3), bgrImage.Width * 3);bgrImage.Release();// Initialize a new Converter objectRasterColorConverterEngine converter = new RasterColorConverterEngine();byte[] yuvBuffer = new byte[bgrBuffer.Length];// Start the color conversionconverter.Start(ConversionColorFormat.Bgr, ConversionColorFormat.Yuv, null);// convert the image bufferconverter.Convert(bgrBuffer, // input buffer0, // offset from the beginning of the source bufferyuvBuffer, // output buffer0, // offset from the beginning of the destination bufferbgrImage.Width, // pixels widthbgrImage.Height, // pixels height0, // 0 bytes align0); // 0 bytes align// stop the conversionconverter.Stop();RasterColorConverterEngine.Shutdown();return yuvBuffer;}RasterImage GetImageFromYuvBuffer(byte[] yuvBuffer, int width, int height){// StartUp the ColorConversion.RasterColorConverterEngine.Startup();// Initialize a new Converter objectRasterColorConverterEngine 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 conversionconverter.Start(ConversionColorFormat.Yuv, ConversionColorFormat.Bgr, null);// convert the image bufferconverter.ConvertToImage(yuvBuffer, // converted buffer0, // offset from the beginning of the source bufferyuvImage, // image to be savewidth, // pixels widthheight, // pixels height0, // 0 bytes align0); // 0 bytes align// stop the conversionconverter.Stop();}catch (Exception ex){Debug.WriteLine(ex.Message);}// Shutdown the ColorConversion.RasterColorConverterEngine.Shutdown();return yuvImage;}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";}