2014-07-25 67 views
2

我試圖從屏幕上覆制PictureBox的位置。我的代碼如下所示:元素矩形

Form1.cs中:

_recorder = new ScreenRecord(); 
_recorder.StartRecording(
    pictureBox1, 
    pictureBox1.RectangleToScreen(new Rectangle()) 
); 

ScreenRecord.cs:

class ScreenRecord 
{ 
    private ScreenBitmap scBitmap; 

    public void StartRecording(PictureBox cam, Rectangle rect) 
    { 
     scBitmap = new ScreenBitmap(cam, rect); 
     cam.Image = scBitmap.GetBitmap(); 
    } 
} 

ScreenBitmap.cs:

class ScreenBitmap 
{ 
    private PictureBox camBox; 
    private Rectangle camLocation; 

    public ScreenBitmap(PictureBox cam, Rectangle rect) 
    { 
     camBox = cam; 
     camLocation = rect; 
    } 

    public Bitmap GetBitmap() 
    { 
     Bitmap screenBitmap = GetScreen(); 
     return screenBitmap; 
    } 

    private Bitmap GetScreen() 
    { 
     Bitmap scBitmap = new Bitmap(camBox.Width, camBox.Height); 
     Graphics g = Graphics.FromImage(scBitmap); 

     g.CopyFromScreen(
     camLocation.X, 
     camLocation.Y, 
     0, 
     0, 
     new Size(camBox.Width, camBox.Height) 
    ); 

     return scBitmap; 
    } 
} 

我得到pictureBox1矩形然後從屏幕上覆制,但看起來不起作用。如果我嘗試下面的代碼:

g.CopyFromScreen(
    camLocation.X, 
    121, 
    0, 
    0, 
    new Size(camBox.Width, camBox.Height) 
); 

其中121是它的工作原理隨機數(我得到的圖像,不是我想要的一部分,但它的工作原理),因此y矩形的座標可能是錯的?或者我失去了一些東西...

+0

你想要捕獲並顯示在畫箱中的是什麼? – terrybozzio

+0

顯示圖片框爲 –

+1

的屏幕部分,這意味着如果picturebox圖像是您想要分配給圖片框的全部綠色圖片,那個圖片的相同?...因爲您正在複製圖片框 – terrybozzio

回答

1

這將讓你知道背後的PictureBox,與不透明技巧。剩下的,你可以方便地傳輸到您的代碼:

//just when you are about to capture screen take opacity and later restore it. 
this.Opacity = 0.0; 
Point first = PointToScreen(pictureBox1.Location); 

Bitmap bit = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
Graphics g = Graphics.FromImage(bit); 

g.CopyFromScreen(first.X,first.Y, 0, 0, pictureBox1.Size); 
this.Opacity = 1.0; 
pictureBox1.Image = bit; 

您可以通過創建一個新的WinForms項目測試該代碼,添加ButtonPictureBox,並將其放置在ButtonClick事件處理程序的代碼。

+0

如果我打算使用這一段時間真正的循環將它非常消耗CPU? –

+0

我認爲它會更多的在內存量上,因爲每次迭代都會創建一個新的位圖。 – terrybozzio