2013-05-08 65 views
1

我正在使用Aforge庫的C#,Winforms應用程序從USB攝像頭中提取視頻並處理該視頻。尋找更高效的軟件縮放

我正在通過使用新的框架事件處理程序並將該圖像發佈到一個圖片框中。到目前爲止,它運行良好,完成了我想要的。

但是,我最近發現我需要將軟件縮放添加到應用程序。我的解決方案是增加整個圖像的大小,然後獲取適合我所需測量的新的更大圖像的一部分。這是在每一個新的框架上完成的。

 int imageTopY; 
    int imageTopX; 
    Rectangle rect; 

    bitmap = new Bitmap(bitmap, new Size(bitmap.Width * zoomTrackBar.Value, 
              bitmap.Height * zoomTrackBar.Value)); 

    imageTopY = ((bitmap.Height - height)/2); 
    imageTopX = ((bitmap.Width - width)/2); 

    if (imageTopY != 0 && imageTopX != 0) 
      rect = new Rectangle(imageTopX, imageTopY, width, height); 
    else 
      rect = new Rectangle(0, 0, width, height); 

     bitmap = (Bitmap)bitmap.Clone(rect, bitmap.PixelFormat) 

這也是我所需要的。但是,它並不高效。當縮放級別達到3時,視頻變得異常緩慢。視頻饋送和發生的事件之間有1-2秒的延遲。我可以起牀做一個小小的舞蹈,當我坐在椅子上時,視頻中的我開始做一些小小的舞蹈:-P

任何關於更好的實現我所嘗試的方式的建議去做?也許更精簡?

+1

我想你想從視頻中剪下一小段,然後放大該部分以適合該區域。這樣,每當你放大時,你只是擴大到一個尺寸,從來沒有這樣做 – JeremyK 2013-05-08 17:54:52

+0

這解決了我的問題。你可以重新發布這個答案,所以我可以給你信用? – 2013-05-08 18:43:30

+0

很高興幫助!過去我不得不做類似的事情。 – JeremyK 2013-05-08 18:54:57

回答

2

不是放大整個圖像,而是剪出希望放大的部分,然後用該圖像填充窗口。這樣,您始終擁有視頻窗口的最大圖像大小,並且不會將整個圖像放大到窗口的約束範圍之外。