Сжатие Bitmap и класс System.IO.Compression.GZipStream - C#
Формулировка задачи:
Доброго времени суток.
Ситуация такая: делаю скриншот монитора в bitmap, далее пытаюсь сжать картинку используя класс GZipStream.
Однако на выходе получаю массив с нулевой длинной.
Вот собственно код:
Прошу помочь разобратсья. Заранее спасибо.
Rectangle screenBounds = Screen.GetBounds(Point.Empty); Bitmap bitmap = new Bitmap(screenBounds.Width, screenBounds.Height, PixelFormat.Format16bppRgb565); using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.CopyFromScreen(Point.Empty, Point.Empty, screenBounds.Size); } byte[] compressed = null; using (MemoryStream bitmapStream = new MemoryStream()) { bitmap.Save(bitmapStream, ImageFormat.Bmp); using (MemoryStream outStream = new MemoryStream()) { using (GZipStream tinyStream = new GZipStream(outStream, CompressionMode.Compress)) { bitmapStream.CopyTo(tinyStream); compressed = outStream.ToArray(); } } }
Решение задачи: «Сжатие Bitmap и класс System.IO.Compression.GZipStream»
textual
Листинг программы
Rectangle screenBounds = Screen.GetBounds( Point.Empty ); byte[] zipped = null; using( var bitmap = new Bitmap( screenBounds.Width, screenBounds.Height, PixelFormat.Format16bppRgb565 ) ) { using( Graphics graphics = Graphics.FromImage( bitmap ) ) graphics.CopyFromScreen( Point.Empty, Point.Empty, screenBounds.Size ); zipped = this.CompressBitmap( bitmap ); } // unzip byte[] source = null; using( var fRead = new MemoryStream( zipped ) ) using( var fWrite = new MemoryStream() ) using( var gzip = new GZipStream( fRead, CompressionMode.Decompress ) ) { var buffer = new byte[4096]; int readed = 0; while( (readed = gzip.Read( buffer, 0, buffer.Length )) != 0 ) fWrite.Write( buffer, 0, readed ); source = fWrite.ToArray(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д