C # печать экрана предопределенной области - PullRequest
0 голосов
/ 19 марта 2011

Я хочу захватить только предопределенную область приложения, например, я хочу напечатать на экране только групповое поле.Я изменил this.bounds на groupbox.bounds, но он не работает.Он захватывает другие регионы, но не групповую рамку.Есть идеи?Коды:

// Set the bitmap object to the size of the screen
    bmpScreenshot = new Bitmap(this.Bounds.Width, this.Bounds.Height, PixelFormat.Format32bppArgb);
    // Create a graphics object from the bitmap
    gfxScreenshot = Graphics.FromImage(bmpScreenshot);
    // Take the screenshot from the upper left corner to the right bottom corner
    gfxScreenshot.CopyFromScreen(this.Bounds.X, this.Bounds.Y, 0, 0, this.Bounds.Size, CopyPixelOperation.SourceCopy);

SaveFileDialog saveImageDialog = new SaveFileDialog();
saveImageDialog.Title = "Select output file:";
saveImageDialog.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
//saveImageDialog.FileName = printFileName;
if (saveImageDialog.ShowDialog() == DialogResult.OK)
{enter code here
    // Save the screenshot to the specified path that the user has chosen
    bmpScreenshot.Save(saveImageDialog.FileName, ImageFormat.Png);
}

Спасибо.

1 Ответ

2 голосов
/ 19 марта 2011

Проблема в том, что координаты в свойстве Bounds относительно его родителя, но CopyFromScreen нужны абсолютные координаты.

Попробуйте использовать метод PointToScreen :

Point p = this.PointToScreen(new Point(groupBox.Bounds.X, groupBox.Bounds.Y));
gfxScreenshot.CopyFromScreen(p.X, p.Y, 0, 0, 
                 groupBox.Bounds.Size, CopyPixelOperation.SourceCopy);
...