none
C# 이미지 바이트 사이즈 줄이는 방법 알려주세요! RRS feed

  • 질문

  • 원격제어의 이미지 송수신하는 부분에서 클라이언트에서 서버에게 이미지를 전송할때 이미지 크기가 

    너무 커서 속도가 저하 되는 문제가 있습니다. 현재 서버에게 보내기 전 이미지 크기를 줄이려고

    비트맵 화질도 낮춰보고 압축도 해봤는데 아직까지 2,3배는 더 줄여야 할 것 같습니다. 

    혹시 여기서 이미지 바이트크기를 더 줄일수 있는 방법이나 전송할때 현재 MemoryStream을 쓰고 있는데 더 빠른 방법이 있으면 알려주시면 감사하겠습니다.

    아 그리고 압축할때 JPEG 포맷으로 했는데 커뮤니티의 다른분이 데이터가 손실될수도 있다고 하시는데 잘 이해는 안되지만 혹시 다른방법이 있으면 가르쳐주시면 감사하겠습니다.


                   
     //
                    int w = Screen.PrimaryScreen.Bounds.Width;
                    int h = Screen.PrimaryScreen.Bounds.Height;

                    //
                    Size s = new Size(w, h);

                    Bitmap ScreenImage = new Bitmap(w, h);

                    Graphics graphics = Graphics.FromImage(ScreenImage);
                    graphics.CopyFromScreen(0, 0, 0, 0, s);

                    int width = ScreenImage.Width / 2;
                    int height = ScreenImage.Height / 2;
                    Size resize = new Size(width, height);
                    Bitmap resizeImage = new Bitmap(ScreenImage, resize);

                    // Bitmap To byte[]
                    MemoryStream ms = new MemoryStream();
                    resizeImage.Save(ms, ImageFormat.Jpeg); // *****
                    ms.Position = 0;
                    byte[] data = ms.ToArray();

                    byte[] compressedByte = Compress(data);



        public static Byte[] Compress(Byte[] buffer)
        {
            Byte[] compressedByte;
            using (MemoryStream ms = new MemoryStream())
            {
                using (DeflateStream ds = new DeflateStream(ms, CompressionMode.Compress))
                {
                    ds.Write(buffer, 0, buffer.Length);
                }

                compressedByte = ms.ToArray();
            }

            return compressedByte;
        }
    2017년 5월 30일 화요일 오후 6:54

답변