画像を白黒反転させるには
画像をつくってみたものの白と黒を反転させたくなることがあり、白黒反転させるアプリをつくりました。一度にまとめて処理をすることができるので便利です。
使い方は簡単。フォームの上にドロップするだけで画像ファイルがあったフォルダにoutputというフォルダをつくってそこに保存します。
まずはファイルのドラッグ&ドロップに対応できるように、AllowDropプロパティをtrueにします。
1 2 3 4 5 6 7 8 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); AllowDrop = true; } } |
次にファイルがドロップされたときにDragDropイベントが発生するようにOnDragOverメソッドをオーバーライドします。
1 2 3 4 5 6 7 8 9 10 |
public partial class Form1 : Form { protected override void OnDragOver(DragEventArgs e) { if(e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; else e.Effect = DragDropEffects.None; } } |
次にファイルがドロップされたときの処理をするためにOnDragDropメソッドをオーバーライドします。
ドロップされたファイルのパスから出力先のファイルパスを求めます。
1 2 |
FileInfo info = new FileInfo(path); string dir = info.DirectoryName; |
とやればファイルがあるフォルダのパスがわかるので
1 |
string destDir = dir + "\\output"; |
とやれば出力先のフォルダパスを取得することができます。
実際にファイルを保存するためにはフォルダが存在する必要があります。
以下はフォルダがあるかどうか調べてなければ作成するコードです。
1 2 |
if(!System.IO.Directory.Exists(destDir)) System.IO.Directory.CreateDirectory(destDir); |
次に画像を反転させるメソッドを作成します。GetColorReverseBitmapメソッドは色を反転させたビットマップを返すメソッドです。透過色は黒として出力します。
ドロップされたファイルは画像ファイルではないかもしれません。その場合は例外が発生するのでcatch文で処理をします。
そしてGetColorReverseBitmapメソッドがnull以外を返したときは処理は成功したとみなしてファイルを出力先に保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public partial class Form1 : Form { Bitmap GetColorReverseBitmap(string sourcePath) { try { Image sourceImage = Image.FromFile(sourcePath); Bitmap bmp = new Bitmap(sourceImage.Width, sourceImage.Height); Graphics g = Graphics.FromImage(bmp); Rectangle rect = new Rectangle(new Point(0, 0), new Size(sourceImage.Width, sourceImage.Height)); g.DrawImage(sourceImage, rect); for(int x = 0; x < sourceImage.Width; x++) { for(int y = 0; y < sourceImage.Height; y++) { Color color = bmp.GetPixel(x, y); Color newColor = Color.Transparent; if(color != Color.Transparent && color != Color.Empty && color != Color.FromArgb(0)) newColor = Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.G); else newColor = Color.FromArgb(0, 0, 0); bmp.SetPixel(x, y, newColor); } } g.Dispose(); sourceImage.Dispose(); return bmp; } catch { return null; } } } |
ファイルがドロップされたときに呼ばれるOnDragDropメソッドを示します。出力用のフォルダを作成して白黒反転させたファイルを保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public partial class Form1 : Form { protected override void OnDragDrop(DragEventArgs e) { if(e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); foreach(var path in files) { FileInfo info = new FileInfo(path); string dir = info.DirectoryName; string name = info.Name; string destDir = dir + "\\output"; string destPath = destDir + "\\" + name; if(!System.IO.Directory.Exists(destDir)) System.IO.Directory.CreateDirectory(destDir); Bitmap bmp = GetColorReverseBitmap(path); if(bmp != null) { bmp.Save(destPath); bmp.Dispose(); } } } } } |