private void VqCompress() { _compressStopWath = new Stopwatch(); _fileName = _openDialog.FileName; OnPropertyChanged("SourceImage"); var bitmap = new Bitmap(_fileName); var k = 0; var colors = new List<Color>(); for (int i = 0; i < bitmap.Width; i++) { for (int j = 0; j < bitmap.Height; j++) { var color = bitmap.GetPixel(i, j); colors.Add(color); k++; } } var image = colors.GroupBy(x => x).AsParallel() .Select(x => new[] { (double)x.Key.R, (double)x.Key.B, (double)x.Key.G }) .AsParallel() .ToArray(); _vq = new VectorQuantization(image, 3, (int)Math.Pow(2, CodeBookSizePow)); _compressed = new VqImage { Height = bitmap.Height, Width = bitmap.Width, CodeBook = _vq.CodeBook.Select( x => new[] { (byte) Math.Round(x[0]), (byte) Math.Round(x[1]), (byte) Math.Round(x[2]) }).ToArray() }; k = 0; var img = new byte[bitmap.Width * bitmap.Height]; for (int i = 0; i < bitmap.Width; i++) { for (int j = 0; j < bitmap.Height; j++) { var color = bitmap.GetPixel(i, j); var pos = _vq.QuantazationIndex(new[] { (double)color.R, color.B, color.G }); img[k] = (byte)pos; k++; } } var rle = new RLE(img); var imgCompr = ((VqImage) _compressed); imgCompr.Image = rle.Compress(); _compressedData = imgCompr.ToByteArray(); _compressedData = HuffmanEncoder.Encode(_compressedData); byte[] result; using (var resultStream = new MemoryStream()) { using (var compressionStream = new DeflateStream(resultStream, CompressionLevel.Optimal)) { compressionStream.Write(_compressedData, 0, _compressedData.Length); } result = resultStream.ToArray(); } _compressedData = result; _compressStopWath.Stop(); }
private void VqCompress() { _compressStopWath = new Stopwatch(); _fileName = _openDialog.FileName; OnPropertyChanged("SourceImage"); var bitmap = new Bitmap(_fileName); var k = 0; var colors = new List <Color>(); for (int i = 0; i < bitmap.Width; i++) { for (int j = 0; j < bitmap.Height; j++) { var color = bitmap.GetPixel(i, j); colors.Add(color); k++; } } var image = colors.GroupBy(x => x).AsParallel() .Select(x => new[] { (double)x.Key.R, (double)x.Key.B, (double)x.Key.G }) .AsParallel() .ToArray(); _vq = new VectorQuantization(image, 3, (int)Math.Pow(2, CodeBookSizePow)); _compressed = new VqImage { Height = bitmap.Height, Width = bitmap.Width, CodeBook = _vq.CodeBook.Select( x => new[] { (byte)Math.Round(x[0]), (byte)Math.Round(x[1]), (byte)Math.Round(x[2]) }).ToArray() }; k = 0; var img = new byte[bitmap.Width * bitmap.Height]; for (int i = 0; i < bitmap.Width; i++) { for (int j = 0; j < bitmap.Height; j++) { var color = bitmap.GetPixel(i, j); var pos = _vq.QuantazationIndex(new[] { (double)color.R, color.B, color.G }); img[k] = (byte)pos; k++; } } var rle = new RLE(img); var imgCompr = ((VqImage)_compressed); imgCompr.Image = rle.Compress(); _compressedData = imgCompr.ToByteArray(); _compressedData = HuffmanEncoder.Encode(_compressedData); byte[] result; using (var resultStream = new MemoryStream()) { using (var compressionStream = new DeflateStream(resultStream, CompressionLevel.Optimal)) { compressionStream.Write(_compressedData, 0, _compressedData.Length); } result = resultStream.ToArray(); } _compressedData = result; _compressStopWath.Stop(); }