/** * すべての軌跡を描画し、画像として保存する。 */ public void SaveAllTrack(string fileName) { //ファイルが閉じている if (playStatus == PlayStatus.Close) { throw new NxtLogFileNotOpenedException("ログファイルが開かれていません。"); } //ログの最後 int last = nxtTrackLog.Length - 1; //保存対象のBitmapを生成 Size courseImageSize = EtCourseScaler.GetPixelCourseSize(); Bitmap trackImage = new Bitmap(courseImageSize.Width, courseImageSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(trackImage); //ベース(コース)描画 g.DrawImage(courseImage, 0, 0); //軌跡描画--------- Point startPoint = EtCourseScaler.NativeToPixelInvY(nxtTrackLog.getLog(last).point); //最初の一点は必ず描画するため、開始座標を+1する startPoint.Offset(new Point(1, 1)); Point endPoint; //色作成 Pen linePen = new Pen(TRACK_LINE_COLOR, TRACK_LINE_WIDTH); for (int i = last; i >= 0; i--) { endPoint = EtCourseScaler.NativeToPixelInvY(nxtTrackLog.getLog(i).point); //描画 g.DrawLine(linePen, startPoint, endPoint); startPoint = endPoint; } //保存 trackImage.Save(fileName, ImageFormat.Png); }
/** * コース画像を読み込んでリサイズし保持する。 * 読込みに失敗した場合は同サイズの白い画像を作成して保持する。 */ private void InitializeImages() { Size courseImageSize = EtCourseScaler.GetPixelCourseSize(); try { Assembly assembly = Assembly.GetExecutingAssembly(); courseImage = new Bitmap(new Bitmap(assembly.GetManifestResourceStream(COURSE_IMAGE)), courseImageSize.Width, courseImageSize.Height); } catch (Exception) { courseImage = new Bitmap(courseImageSize.Width, courseImageSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(courseImage); g.Clear(Color.White); g.DrawString("コース画像を読み込めませんでした。起動は続行されますが、コース画像は表示されません。", DefaultFont, new SolidBrush(GRID_TEXT_COLOR), new Point(0, 0)); } DrawGrid(courseImage, EtCourseScaler.NativeToPixel(GRID_PITCH)); //renderTargetを同サイズに renderTarget = new Bitmap(courseImageSize.Width, courseImageSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); }