Сжатие 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();
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы