//──────────────────────────────────────── public void Save( Usercontrolview_Infodisplay infodisplay, CheckBox pcchkInfo, Usercontrol_Canvas uc_FrameMemo ) { if (null != infodisplay.MemorySprite.Bitmap) { Bitmap bm = new Function4Save1bImpl().CreateSaveImage( infodisplay, pcchkInfo, uc_FrameMemo ); // ファイル名を適当に作成。 StringBuilder s = new StringBuilder(); { s.Append(Application.StartupPath); s.Append("\\ScreenShot\\"); DateTime now = System.DateTime.Now; s.Append(now.Year); s.Append("_"); s.Append(now.Month); s.Append("_"); s.Append(now.Day); s.Append("_"); s.Append(now.Hour); s.Append("_"); s.Append(now.Minute); s.Append("_"); s.Append(now.Second); s.Append("_"); s.Append(now.Millisecond); s.Append(".png"); } // .exeの入っているフォルダーに ScreenShot フォルダーを置くこと。 bm.Save(s.ToString(), System.Drawing.Imaging.ImageFormat.Png); } }
//──────────────────────────────────────── /// <summary> /// 保存する画像の作成。 /// </summary> public Bitmap CreateSaveImage( Usercontrolview_Infodisplay infodisplay, CheckBox pcchkInfo, Usercontrol_Canvas uc_FrameMemo ) { Bitmap bm; if (null != infodisplay.MemorySprite.Bitmap) { // 情報領域 int infoHeight; { int infoRows = infodisplay.InfoRows; int nHeightMargin = 8 + 4; int nFontSize = 16; infoHeight = infoRows * nFontSize + nHeightMargin; } { // 情報欄のサイズ SizeF infoSizeF; if (pcchkInfo.Checked) { // // 情報表示時 // bm = new Bitmap(1, 1); //ダミーのGraphicsオブジェクトを取得 Graphics dammy_g = Graphics.FromImage(bm); infoSizeF = dammy_g.MeasureString(infodisplay.ToString_FileName(), infodisplay.Font); // すぐ、Graphicsを廃棄。 dammy_g.Dispose(); // 横幅を 4px 大きく取る。 infoSizeF.Width += 4; } else { infoSizeF = new SizeF(); } // 新規画像サイズ。 int w; int h; if (infodisplay.MemorySprite.IsCrop) { w = (int)infodisplay.MemorySprite.WidthcellResult; h = (int)infodisplay.MemorySprite.HeightcellResult; } else { w = infodisplay.MemorySprite.Bitmap.Width; h = infodisplay.MemorySprite.Bitmap.Height; } if (pcchkInfo.Checked) { // 横幅の最低値 int minW = (int)infoSizeF.Width; if (w < minW) { w = minW; } } // 横幅の上限(画像の横幅、または画像の横幅が300未満の場合、300) { int maxW; if (300 <= infodisplay.MemorySprite.Bitmap.Width) { maxW = infodisplay.MemorySprite.Bitmap.Width; } else { maxW = 300; } if (maxW < w) { w = maxW; } } // 縦幅 if (pcchkInfo.Checked) { h += infoHeight; } bm = new Bitmap(w, h); } //imgのGraphicsオブジェクトを取得 Graphics g = Graphics.FromImage(bm); try { // 背景色(自動の場合は、塗りつぶさない) if (uc_FrameMemo.BackColor != SystemColors.Control) { g.FillRectangle(new SolidBrush(uc_FrameMemo.BackColor), 0, 0, bm.Width, bm.Height); } float baseX = 0; float baseY = 0; if (pcchkInfo.Checked) { baseY += infoHeight; } uc_FrameMemo.PaintSprite( g, false, baseX, baseY, 1.0F );//等倍 } finally { g.Dispose(); } } else { bm = null; } return bm; }
//──────────────────────────────────────── public void Save( Usercontrolview_Infodisplay infodisplay, CheckBox pcchkInfo, Usercontrol_Canvas uc_FrameMemo ) { if (null != infodisplay.MemorySprite.Bitmap) { // 列数と行数。 int nCols = (int)infodisplay.MemorySprite.CountcolumnResult; int nRows = (int)infodisplay.MemorySprite.CountrowResult; // ファイル名の頭。 StringBuilder s1 = new StringBuilder(); { s1.Append(Application.StartupPath); s1.Append("\\ScreenShot\\"); DateTime now = System.DateTime.Now; s1.Append(now.Year); s1.Append("_"); s1.Append(now.Month); s1.Append("_"); s1.Append(now.Day); s1.Append("_"); s1.Append(now.Hour); s1.Append("_"); s1.Append(now.Minute); s1.Append("_"); s1.Append(now.Second); s1.Append("_"); s1.Append(now.Millisecond); } for (int nRow = 1; nRow <= nRows; nRow++) { for (int nCol = 1; nCol <= nCols; nCol++) { int nCell = (nRow - 1) * nCols + nCol; System.Console.WriteLine("r" + nRow + " c" + nCol + " nCell" + nCell + " nRows" + nRows + " nCols" + nCols); uc_FrameMemo.Usercontrol_FrameParam.PctxtCropForce.Text = nCell.ToString(); Bitmap bm = new Function4Save1bImpl().CreateSaveImage( infodisplay, pcchkInfo, uc_FrameMemo ); // ファイル名を適当に作成。 StringBuilder s = new StringBuilder(); { s.Append(s1.ToString()); s.Append("_c"); s.Append(nCell.ToString()); s.Append(".png"); } // .exeの入っているフォルダーに ScreenShot フォルダーを置くこと。 bm.Save(s.ToString(), System.Drawing.Imaging.ImageFormat.Png); } } } }
//──────────────────────────────────────── /// <summary> /// 保存する画像の作成。 /// </summary> public Bitmap CreateSaveImage( Usercontrolview_Infodisplay infodisplay, CheckBox pcchkInfo, Usercontrol_Canvas uc_FrameMemo ) { Bitmap bm; if (null != infodisplay.MemorySprite.Bitmap) { // 情報領域 int infoHeight; { int infoRows = infodisplay.InfoRows; int nHeightMargin = 8 + 4; int nFontSize = 16; infoHeight = infoRows * nFontSize + nHeightMargin; } { // 情報欄のサイズ SizeF infoSizeF; if (pcchkInfo.Checked) { // // 情報表示時 // bm = new Bitmap(1, 1); //ダミーのGraphicsオブジェクトを取得 Graphics dammy_g = Graphics.FromImage(bm); infoSizeF = dammy_g.MeasureString(infodisplay.ToString_FileName(), infodisplay.Font); // すぐ、Graphicsを廃棄。 dammy_g.Dispose(); // 横幅を 4px 大きく取る。 infoSizeF.Width += 4; } else { infoSizeF = new SizeF(); } // 新規画像サイズ。 int w; int h; if (infodisplay.MemorySprite.IsCrop) { w = (int)infodisplay.MemorySprite.WidthcellResult; h = (int)infodisplay.MemorySprite.HeightcellResult; } else { w = infodisplay.MemorySprite.Bitmap.Width; h = infodisplay.MemorySprite.Bitmap.Height; } if (pcchkInfo.Checked) { // 横幅の最低値 int minW = (int)infoSizeF.Width; if (w < minW) { w = minW; } } // 横幅の上限(画像の横幅、または画像の横幅が300未満の場合、300) { int maxW; if (300 <= infodisplay.MemorySprite.Bitmap.Width) { maxW = infodisplay.MemorySprite.Bitmap.Width; } else { maxW = 300; } if (maxW < w) { w = maxW; } } // 縦幅 if (pcchkInfo.Checked) { h += infoHeight; } bm = new Bitmap(w, h); } //imgのGraphicsオブジェクトを取得 Graphics g = Graphics.FromImage(bm); try { // 背景色(自動の場合は、塗りつぶさない) if (uc_FrameMemo.BackColor != SystemColors.Control) { g.FillRectangle(new SolidBrush(uc_FrameMemo.BackColor), 0, 0, bm.Width, bm.Height); } float baseX = 0; float baseY = 0; if (pcchkInfo.Checked) { baseY += infoHeight; } uc_FrameMemo.PaintSprite( g, false, baseX, baseY, 1.0F );//等倍 } finally { g.Dispose(); } } else { bm = null; } return(bm); }