2012-03-05 116 views
0

我的應用使用WinAPI中的方法制作截圖。屏幕是好的,它保存爲gif並具有76 kB。 JPG,PNG和其他格式有更多的大小。我必須通過網絡發送這個文件,它需要幾秒鐘,大約2-3秒。在.NET或任何免費的外部軟件中壓縮此文件是否可行?質量不好,因爲我只需要閱讀幾個標籤。如何將截圖通過網絡進行壓縮發送?

感謝

+0

想要在保存圖像之前縮放圖像(降低分辨率)嗎?你可以用純C#來做到這一點。 – egrunin 2012-03-05 21:59:43

+0

2-3秒發送76kb似乎有點慢...您使用什麼代碼? – 2012-03-05 22:01:58

+0

VNC是一個相當輕的協議,包含許多像樣的圖像傳輸優化。即使你沒有整體使用它,你也可能會學到一些東西來解決這個問題。 – 2012-03-05 22:07:54

回答

2

你可以看看在C#中調整圖像的大小。這很容易做...以下是我過去使用過的一些代碼:

Image image = Image.FromFile(fi.FullName); 
image = resizeImage(image, new Size(120, 120)); 
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)85); 
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg"); 
EncoderParameters encoderParams = new EncoderParameters(1); 
encoderParams.Param[0] = qualityParam; 
image.Save(OutSourceLoc + "/" + fi.Name, jpegCodec, encoderParams); 


static Image resizeImage(Image imgToResize, Size size) 
    { 
     int sourceWidth = imgToResize.Width; 
     int sourceHeight = imgToResize.Height; 

     float nPercent = 0; 
     float nPercentW = 0; 
     float nPercentH = 0; 

     nPercentW = ((float)size.Width/(float)sourceWidth); 
     nPercentH = ((float)size.Height/(float)sourceHeight); 

     if (nPercentH < nPercentW) 
      nPercent = nPercentH; 
     else 
      nPercent = nPercentW; 

     int destWidth = (int)(sourceWidth * nPercent); 
     int destHeight = (int)(sourceHeight * nPercent); 

     Bitmap b = new Bitmap(destWidth, destHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb); 
     b.SetResolution(300, 300); 
     Graphics g = Graphics.FromImage((Image)b); 
     g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     g.CompositingQuality = CompositingQuality.HighSpeed; 
     g.SmoothingMode = SmoothingMode.HighSpeed; 

     g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); 
     g.Dispose(); 

     return (Image)b; 

    } 

    private static ImageCodecInfo GetEncoderInfo(string mimeType) 
    { 
     // Get image codecs for all image formats 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 

     // Find the correct image codec 
     for (int i = 0; i < codecs.Length; i++) 
      if (codecs[i].MimeType == mimeType) 
       return codecs[i]; 
     return null; 
    } 
0

除非你試圖整合多個圖像轉移到一個文件中(它們組合成一個zip文件,例如)我沒有看到壓縮圖像的點。

JPG,GIF或PNG已經幾乎儘可能地壓縮了。例如,使用GZIP壓縮現有文件會浪費計算資源而不會帶來好處。

JPG,GIF,PNG已經採用壓縮,就像mp3一樣。

維基百科:

可移植網絡圖形(PNG /pɪŋ/ [2])是採用無損數據壓縮

JPEG位圖圖像格式(/dʒeɪpɛɡ/ [發音爲松鴉 - 佩格]是一種常用的方法有損壓縮數碼攝影(圖片)

GIF圖像壓縮使用Lempel-Ziv-Welch(LZW)無損數據壓縮技術來減少文件大小不降低視覺質量

1

如果你需要的是文字,也許你可以減少色彩,例如4色灰色圖像?

+0

這可能會使(推測)文本識別更困難,也許。 – 2012-03-05 22:01:18

+0

如果您希望png/gif壓縮在之後很好地工作,那麼減少顏色深度應該沒有抖動。 – CodesInChaos 2012-03-05 22:01:35