直列つなぎ。 -とある発達障害者の記録

知識と知識を繋ぐためのblog。 広汎性発達と診断されました。ぜんぜん役に立ってないけど。月収13万円、家賃4万円で生活するひつじ人間。

【C# Tips】自作スクリーンキャプチャソフトの記録

 ネット上に投稿されてるC#のコードを流用して、自作キャプチャソフトを作ろうとした記録。オリジナル要素はほとんどなし。
 用途:アップされてる同人誌画像をファイル名連番で保存したい。


 結果:あんまり上手く行かなかった。→貼られてる画像のサイズがでか過ぎてはみ出る。









namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{


  #region イメージキャプチャ用変数
//using System.Drawing;

Rectangle r;
Bitmap bmp;   
Bitmap bmpNew;  //画像リサイズ用変数
Rectangle rect;  //クライアント座標取得用


#endregion

public string LoadPath;  //ファイル保存先パス設定用





public void CaptureFrame()
{
this.TransparencyKey = this.BackColor;

System.Threading.Thread.Sleep(50);
//フォーム移動時に若干取得が早過ぎるため



r = Screen.PrimaryScreen.Bounds;
//ディスプレイの範囲を取得

bmp = new Bitmap(r.Width, r.Height, PixelFormat.Format32bppArgb);
//using System.Drawing.Imaging;
       



// 4.Graphicsオブジェクトの生成
var g = Graphics.FromImage(bmp);

      // 5.転送元の左上座標取得
var upperLeftSource = this.PointToScreen(new Point(0, 0));

// 6.転送先の左上座標取得
var upperLeftDestination = new Point(0, 0);


// 7.CopyFromScreenメソッドでキャプチャ
g.CopyFromScreen(
upperLeftSource, upperLeftDestination,
this.ClientSize, CopyPixelOperation.SourceCopy);


rect = new Rectangle(0, 0, this.ClientSize.Width, this.ClientSize.Height);

this.BackgroundImage = bmp;

  
}




    //メソッドのオーバーロード
// 同名のメソッドのシグネチャを変えている。
//こうすると、指定する値を変えるだけでメソッドを呼び出せる
     //同じ処理を複数記述する手間が省ける
public void CaptureFrame(Rectangle r)
{
LoadPath = System.IO.Directory.GetCurrentDirectory();
             //カレントディレクトリ取得用



   //この時点では、スクリーンの全体の範囲を取得しているため、クライアント領域を含む
   //黒い部分まで保存してしまう(この黒い部分は画像が取得出来なかった範囲を示す)
   //そこでフォームのクライアント領域と同じサイズにトリミングする
bmpNew = bmp.Clone(rect, bmp.PixelFormat);
                     //using System.Drawing.Imaging;が必要
       



bmpNew.Save(LoadPath + "\\Picture.jpg", ImageFormat.Jpeg);
// ファイル出力



}


//フォームのFormBoderStyleをSizebleにしておくと見栄えが良い。

private void Form1_Load(object sender, EventArgs e)
{

CaptureFrame();
 //フォームのクライアント領域を背景画像に設定するためのメソッド

this.AllowTransparency = false;
//フォームを不透明度調節をオフにする
}




//とりあえず三つほどフォームのイベントを追加しておく
private void Form3_Move(object sender, EventArgs e)
{
CaptureFrame();



this.AllowTransparency = false;

}


private void Form3_KeyDown(object sender, KeyEventArgs e)
//Form1のKeyPreviewプロパティをtrueにしておく

{
if (e.KeyCode == Keys.S)
{
CaptureFrame(r);


}
}



private void Form3_Resize(object sender, EventArgs e)
{


CaptureFrame();

this.AllowTransparency = false;




}

}




同人誌がでか過ぎて上手く取れない
関連記事
スポンサーサイト

 Category: None

 C#

0 Comments

Leave a comment