/// <summary>
        /// Test function, to generate the gray level picture
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnGetGrayLevel_Click(object sender, RoutedEventArgs e)
        {
            var fileBytes = File.ReadAllBytes(_imageLocation);

            grayscaleListY.Clear();
            grayscaleListU.Clear();
            grayscaleListV.Clear();

            var sw = Stopwatch.StartNew();//for count time used

            Bitmap grayScaleBitMap = new Bitmap(_imageLocation);

            for (int x = 0; x < grayScaleBitMap.Width; x++)
            {
                for (int y = 0; y < grayScaleBitMap.Height; y++)
                {
                    System.Drawing.Color pixelColor = grayScaleBitMap.GetPixel(x, y);
                    int grayscaleY = (int)(ColorSpaceConversion.RgbToY(pixelColor.R, pixelColor.G, pixelColor.B));//convert color to gray
                    int grayscaleU = (int)(ColorSpaceConversion.RgbToU(pixelColor.R, pixelColor.G, pixelColor.B));
                    int grayscaleV = (int)(ColorSpaceConversion.RgbToV(pixelColor.R, pixelColor.G, pixelColor.B));
                    grayscaleListY.Add(grayscaleY);
                    grayscaleListU.Add(grayscaleU);
                    grayscaleListV.Add(grayscaleV);
                    System.Drawing.Color newColor = System.Drawing.Color.FromArgb(pixelColor.A, grayscaleY, grayscaleY, grayscaleY);
                    grayScaleBitMap.SetPixel(x, y, newColor);
                }
            }
            BitmapToImageSource(GrayScaleImage, grayScaleBitMap); //render gray image

            sw.Stop();
            grayScaleBitMap.Save(AppDomain.CurrentDomain.BaseDirectory + "grayScaleImage.jpg");//save to LBSWatermarkingWithUI/bin/debug
            EmbedTime.Text = String.Format("{0}ms", sw.ElapsedMilliseconds);
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public byte[] Decompress(byte[] blockData, int width, int height)
        {
            int totalPixels = width * height;

            byte[] decompressed = new byte[totalPixels * 3];
            Span <ImageSharp.PixelFormats.Rgb24> rgb24Span = MemoryMarshal.Cast <byte, ImageSharp.PixelFormats.Rgb24>(decompressed);

            // Same as Y216 with least significant 6 bits set to zero.
            var pixel    = default(ImageSharp.PixelFormats.Rgb24);
            int pixelIdx = 0;

            for (int i = 0; i < blockData.Length; i += 8)
            {
                uint y0 = BitConverter.ToUInt16(blockData, i);
                uint u  = BitConverter.ToUInt16(blockData, i + 2);
                uint y1 = BitConverter.ToUInt16(blockData, i + 4);
                uint v  = BitConverter.ToUInt16(blockData, i + 6);

                y0 = (y0 >> 6) - 64;
                u  = (u >> 6) - 512;
                y1 = (y1 >> 6) - 64;
                v  = (v >> 6) - 512;

                Vector4 rgbVec = ColorSpaceConversion.YuvToRgba10Bit(y0, u, v);
                pixel.FromVector4(rgbVec);
                rgb24Span[pixelIdx++] = pixel;
                if (pixelIdx >= totalPixels)
                {
                    break;
                }

                rgbVec = ColorSpaceConversion.YuvToRgba10Bit(y1, u, v);
                pixel.FromVector4(rgbVec);
                rgb24Span[pixelIdx++] = pixel;
            }

            return(decompressed);
        }
Exemplo n.º 3
0
        /// <inheritdoc/>
        public byte[] Decompress(byte[] blockData, int width, int height)
        {
            int totalPixels = width * height;

            byte[] decompressed = new byte[totalPixels * 3];
            Span <ImageSharp.PixelFormats.Rgb24> rgb24Span = MemoryMarshal.Cast <byte, ImageSharp.PixelFormats.Rgb24>(decompressed);

            var pixel    = default(ImageSharp.PixelFormats.Rgb24);
            int pixelIdx = 0;

            for (int i = 0; i < blockData.Length; i += 4)
            {
                int y0 = blockData[i];
                int u  = blockData[i + 1];
                int y1 = blockData[i + 2];
                int v  = blockData[i + 3];

                y0 -= 16;
                u  -= 128;
                y1 -= 16;
                v  -= 128;

                Vector4 rgbVec = ColorSpaceConversion.YuvToRgba8Bit(y0, u, v);
                pixel.FromVector4(rgbVec);
                rgb24Span[pixelIdx++] = pixel;
                if (pixelIdx >= totalPixels)
                {
                    break;
                }

                rgbVec = ColorSpaceConversion.YuvToRgba8Bit(y1, u, v);
                pixel.FromVector4(rgbVec);
                rgb24Span[pixelIdx++] = pixel;
            }

            return(decompressed);
        }
Exemplo n.º 4
0
        /// <inheritdoc/>
        public byte[] Decompress(byte[] blockData, int width, int height)
        {
            int totalPixels = width * height;

            byte[] decompressed = new byte[totalPixels * 3];
            Span <ImageSharp.PixelFormats.Rgb24> rgb24Span = MemoryMarshal.Cast <byte, ImageSharp.PixelFormats.Rgb24>(decompressed);

            var pixel    = default(ImageSharp.PixelFormats.Rgb24);
            int pixelIdx = 0;

            for (int i = 0; i < blockData.Length; i += 8)
            {
                uint y0 = BitConverter.ToUInt16(blockData, i);
                uint u  = BitConverter.ToUInt16(blockData, i + 2);
                uint y1 = BitConverter.ToUInt16(blockData, i + 4);
                uint v  = BitConverter.ToUInt16(blockData, i + 6);

                y0 -= 4096;
                u  -= 32768;
                y1 -= 4096;
                v  -= 32768;

                Vector4 rgbVec = ColorSpaceConversion.YuvToRgba16Bit(y0, u, v);
                pixel.FromVector4(rgbVec);
                rgb24Span[pixelIdx++] = pixel;
                if (pixelIdx >= totalPixels)
                {
                    break;
                }

                rgbVec = ColorSpaceConversion.YuvToRgba16Bit(y1, u, v);
                pixel.FromVector4(rgbVec);
                rgb24Span[pixelIdx++] = pixel;
            }

            return(decompressed);
        }