2012-10-30 69 views
0

我有這樣的代碼:有沒有辦法以較低的分辨率保存位圖,然後Jpeg?要更改分辨率手冊?

int ISampleGrabberCB.BufferCB(double sampleTime, IntPtr pBuffer, int bufferLen) 
     { 

      if (Form1.ExtractAutomatic == true) 
      { 
       using (var bitmap = new Bitmap(_width, _height, _width * 3, PixelFormat.Format24bppRgb, pBuffer)) 
       { 
        if (!this.Secondpass) 
        { 
         long[] HistogramValues = Form1.GetHistogram(bitmap); 
         Form1.Histograms.Add(HistogramValues); 
         long t = Form1.GetTopLumAmount(HistogramValues, 1000); 
         Form1.averagesTest.Add(t); 

        } 
        else 
        { 

         if (_frameId > 0) 
         { 
          double t = Form1.averagesTest[_frameId]/1000.0 - Form1.averagesTest[_frameId - 1]/1000.0; 
          w.WriteLine("averagesTest >>> " + t); 
          if (_frameId == 1049) 
          { 
           w.Close(); 
          } 
          if (Form1.averagesTest[_frameId]/1000.0 - Form1.averagesTest[_frameId - 1]/1000.0 > 60.0)        { 
           count = 6; 
          } 

          if (count > 0) 
          { 
           bitmap.RotateFlip(RotateFlipType.Rotate180FlipX); 
           bitmap.Save(Path.Combine(_outFolder, _frameId.ToString("D6") + ".jpg"),ImageFormat.Jpeg); 
           count --; 
          } 

是我救的位圖作爲位圖.BMP現在我改成爲JPEG .JPG之前,但反正是有改變JPG被保存在一個較低的分辨率?也許手動改變?

bitmap.Save(Path.Combine(_outFolder, _frameId.ToString("D6") + ".jpg"),ImageFormat.Jpeg); 

將其保存爲jpeg可能將其保存爲jpeg,但分辨率要低得多。 原因是我想要顯示每個位圖直方圖,並同時顯示圖片/框架它自己在pictureBox中,但我如果我將能夠以較低的分辨率保存它的保存過程將更快。

由於我想檢查直方圖,我不介意在這種情況下圖像/幀將以低分辨率顯示。

回答

3

分辨率對保存的圖像文件完全沒有影響。這是一個參考數字,它表示圖像在創建圖像的設備上有多大(以英寸爲單位)。

當您在具有完全不同分辨率的設備上顯示圖像時,它變得非常重要。一個很好的例子就是您在機器上的繪圖程序中創建的圖像。然後在紙上打印。

在您的繪畫程序中,您可以創建1600 x 900像素的圖像,並且它填充了筆記本電腦的全部屏幕,全部14英寸。如果您在打印機上以600點/英寸的分辨率打印,那麼相同的圖像將爲1600/600 x 900/600 = 2.7 x 1.5英寸。它變成了紙上的郵票。

爲了避免這種情況,圖像有重新縮放所以它也需要14英寸的紙張。圖像中的分辨率參考號允許重新縮放。您的繪畫程序記錄了您的顯示器的分辨率,例如每英寸120個點。當您打印它並看到打印機的每英寸分辨率爲600點時,您將知道需要將圖像打印5倍,以使其尺寸與紙張相同。

爲了讓圖像更快地保存,您需要將其縮小。以像素爲單位位圖(圖像,大小)構造函數是一種簡單的方法。