/// <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); }
/// <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); }
/// <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); }
/// <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); }