2013-05-25 40 views
1

想象一下,我有一個有3列和2行的網格。我想拍攝第2-3列和第1列內的圖片。這可能嗎?網格的特定列和行的屏幕截圖

現在我可以採取截圖我的繪圖表用這種方法

private void Capture() 
      { 
       SaveFileDialog dlg = new SaveFileDialog(); 
       dlg.FileName = "hello"; 
       dlg.Filter = "JPEG (*.jpg)|*.jpg|PNG (*.png)"; 
       dlg.FilterIndex = 1; 
       if (dlg.ShowDialog().GetValueOrDefault(false)) 
       { 
        string filePath = dlg.FileName; 
        plotter.SaveScreenshot(filePath); 
        e.Handled = true; 
       } 

      } 

凡繪圖儀是CHARTPLOTTER(在DynamicDataDisplay類),它有一個名爲「SaveScreenshot」的方法。

但它只需要該特定繪圖儀的屏幕截圖。我的想法是有幾個繪圖儀,並能夠爲他們所有人制作截圖。爲此,我可以將它們放到一個StackPanel或一個網格中,並將該元素的圖片作爲整體(包含我所有的繪圖儀)。

回答

1

是的。我不知道你是否希望使用它。但是如果你只是想把它保存在一個數組中,例如你可以用for循環來做到這一點。您例如,只需要一個循環:

int[,] array = new int[2,3]; 


static int[,] ScreenShot(int row, int colum1, int colum2) 
{ 
    int[,] temp = new int[colum2-colum1, 1]; 
    for (int i = 0; i < colum2-colum1; i++) 
    { 
     temp[i,1] = array[i+colum1,row]; 
    } 
} 

,如果你希望它有更多的行,你可以擴展它。

+0

謝謝,但我如何使用該數組來保存圖片? – Sturm

+0

這會更復雜一點。你能描述一點你想用它的情況嗎?所以我可以給出更好的答案? – Emscape

+0

我已經更新了我的問題,並多解釋了一下。非常感謝 – Sturm

0

這不會是最快或者最好的解決方案,但是你可以製作一系列繪圖儀,然後創建一個臨時的小圖片陣列(會使用更無損的jpg格式)並將它們結合在一起。這對你有用嗎?

+0

但是,在特定區域沒有捕獲屏幕上的所有內容? (例如在一個矩形,一個StackPanel,一個網格......)。還有另外一個問題,那就是我在我的應用程序中有一個很好的漸變背景,並且繪圖儀被設置爲透明背景。如果我按照上面描述的方式捕獲它們,則得到的背景是黑色的。所以我認爲我唯一的選擇就是找出如何在某個特定的地方進行屏幕截圖。謝謝你的答案=) – Sturm

+1

如果你畫出一切,那就是。我知道XNA有一個很好的方式來使用Texture2D類或RenderTarget2D類進行截圖。它可能與兩者都這樣做。如果沒有,您還可以編寫一些hlsl代碼來渲染屏幕的一部分,並將其保存爲圖像。 – Emscape

+0

謝謝我會調查XNA的事情。上午4:40,時間去睡覺。如果我找到它,我會發布解決方案。 – Sturm