1
スクリーンキャプチャを取得し、画面全体のpng形式で保存したいと考えています。どうやってやるの?png形式のデスクトップキャプチャ
これを行うにはSnipping Toolライブラリを使用できますか?インターネットでは、Windowsフォームでこれを行う方法を示すチュートリアルがあり、イメージはビットマップ形式です。
スクリーンキャプチャを取得し、画面全体のpng形式で保存したいと考えています。どうやってやるの?png形式のデスクトップキャプチャ
これを行うにはSnipping Toolライブラリを使用できますか?インターネットでは、Windowsフォームでこれを行う方法を示すチュートリアルがあり、イメージはビットマップ形式です。
ここでは、どの画面のコンテンツをキャプチャするための小さな方法です。使い方の
private static void CaptureScreen(Screen window, string file)
{
try
{
Rectangle s_rect = window.Bounds;
using (Bitmap bmp = new Bitmap(s_rect.Width, s_rect.Height))
{
using (Graphics gScreen = Graphics.FromImage(bmp))
gScreen.CopyFromScreen(s_rect.Location, Point.Empty, s_rect.Size);
bmp.Save(file, System.Drawing.Imaging.ImageFormat.Png);
}
}
catch (Exception) { /*TODO: Any exception handling.*/ }
}
例:
CaptureScreen(Screen.PrimaryScreen, @"B:\exampleScreenshot.png");
EDIT:後、私はあなたが使用する方法を選択することができますので、それは関数からImage
オブジェクトを返すために、おそらくより便利だ実現はこれに戻って来るキャプチャビットマップ。
私はこの機能をもう少し堅牢にして、複数の画面をキャプチャできるようにしました(マルチモニタの設定など)。それははは、さまざまな高さの画面に対応する必要がありますが、私はこれを自分でテストすることはできません。
public static Image CaptureScreens(params Screen[] screens) {
if (screens == null || screens.Length == 0)
throw new ArgumentNullException("screens");
// Order them in logical left-to-right fashion.
var orderedScreens = screens.OrderBy(s => s.Bounds.Left).ToList();
// Calculate the total width needed to fit all the screen into a single image
var totalWidth = orderedScreens.Sum(s => s.Bounds.Width);
// In order to handle screens of different sizes, make sure to make the Bitmap large enough to fit the tallest screen
var maxHeight = orderedScreens.Max(s => s.Bounds.Top + s.Bounds.Height);
var bmp = new Bitmap(totalWidth, maxHeight);
int offset = 0;
// Copy each screen to the bitmap
using (var g = Graphics.FromImage(bmp)) {
foreach (var screen in orderedScreens) {
g.CopyFromScreen(screen.Bounds.Left, screen.Bounds.Top, offset, screen.Bounds.Top, screen.Bounds.Size);
offset += screen.Bounds.Width;
}
}
return bmp;
}
新例:
// Capture all monitors and save them to file
CaptureScreens(Screen.AllScreens).Save(@"C:\Users\FooBar\screens.png");