行先表示の変換プログラム
現在電光掲示板(実物)を作ろうとしています。
表示するものがないとアレなのでネットに多く出回っている行先表示を扱いやすく変換するプログラムを書きました。出回っている行先表示を再現した画像はこのように、LEDの表示をモニタ上で再現するためにLED1個分で4ドット使いドット間は1ドットずつあいているのが一般的なようです。
電光掲示板を作るに先立って、この画像から元データを再現するプログラムを書きました。C#で書いてみるとやはり画像の扱いが非常に楽ですね。
変換プログラムはコンソールアプリで、画像ファイルをD&Dでも動作します。とりあえず223系などで使われている96x32ドットの行先表示のみに対応したつもりなので、289x97ドットの画像以外ははねのけます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; namespace BitmapConv { class Program { static void Main(string[] args) { Bitmap img; var outimg = new Bitmap(96, 32); var outputfilename = "output.bmp"; int x, y; if (args.Length < 1) { Console.WriteLine("Usage: BitmapConv.exe [input file] [output file](optional)"); Environment.Exit(0); } else if (args.Length == 2) outputfilename = args[1]; try { img = new Bitmap(args[0]); if (img.Width != 289 || img.Height != 97) { Console.WriteLine("Error: Input image size must be 289x97."); img.Dispose(); Environment.Exit(0); } for (x = 0; x < 96; x++) for (y = 0; y < 32; y++) outimg.SetPixel(x, y, img.GetPixel(3 * x + 1, 3 * y + 1)); img.Dispose(); } catch (ArgumentException) { Console.WriteLine("There was an error." + "Check the path to the image file."); Environment.Exit(0); } outimg.Save(outputfilename); outimg.Dispose(); } } }