主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

.NET Framework: C#などで使えるスクショのためのクラス

                
 C#でスクショを取ることが何度かあったので、汎用性のためにDLLを用意した。メモリリーク対策済み。

target: .NET Framework 4
Screenshot.Save(x, y, width, height, scale, filename, [jpegQuality]);


参考
http://stackoverflow.com/questions/5049122/capture-the-screen-shot-using-net
http://stackoverflow.com/questions/6417299/memoryleak-when-saving-a-bitmap
http://www.voidspace.org.uk/ironpython/winforms/part10.shtml

コード
using System;
using System.Drawing;
using System.IO;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace NScreenshot
{
public class Screenshot
{
public static void Save(int x, int y, int w, int h, double scale, string filename="new.png", int jpegQuality=95)
{
Bitmap bmp = new Bitmap(w, h);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(
new System.Drawing.Point(x, y),
System.Drawing.Point.Empty,
new System.Drawing.Size(w, h));
IntPtr screenBmp = bmp.GetHbitmap();
BitmapSource image = Imaging.CreateBitmapSourceFromHBitmap(
screenBmp,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
BitmapSource tbBitmap = new TransformedBitmap(
image,
new ScaleTransform(scale, scale));

var encodeType = filename.Remove(0, filename.Length-3);
if (encodeType == "jpg")
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.QualityLevel = jpegQuality;
encoder.Frames.Add(BitmapFrame.Create(tbBitmap));
Stream stream = new FileStream(filename, System.IO.FileMode.Create);
encoder.Save(stream);
stream.Close();
}
else if (encodeType == "png")
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(tbBitmap));
Stream stream = new FileStream(filename, System.IO.FileMode.Create);
encoder.Save(stream);
stream.Close();
}

UnmanagedCode.GDI32.DeleteObject(screenBmp);
}
}
}
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。