[C#] BitmapクラスのSaveメソッドの使い方 – BMP画像の保存

C#のBitmapクラスSaveメソッドは、画像を指定した形式でファイルに保存するために使用されます。

BMP形式で保存するには、Saveメソッドの第2引数にImageFormat.Bmpを指定します。

例えば、bitmap.Save("path_to_file.bmp", ImageFormat.Bmp);のように記述します。

Bitmapオブジェクトは、画像の編集や生成後にファイルとして保存する際に便利です。

ファイルパスのみ指定した場合、デフォルトでBMP形式で保存されます。

この記事でわかること
  • C#のBitmapクラスのSaveメソッドの使い方
  • BMP形式で画像を保存する方法
  • 他の画像形式での保存手法
  • ファイルパスの指定方法と注意点
  • 画像処理の応用例と実装方法

目次から探す

Saveメソッドの基本

Saveメソッドの概要

C#のBitmapクラスには、画像をファイルに保存するためのSaveメソッドがあります。

このメソッドを使用することで、様々な画像形式で画像データを保存することができます。

特に、BMP形式での保存が簡単に行えるため、画像処理の初歩的な学習に適しています。

Saveメソッドのシグネチャ

Saveメソッドのシグネチャは以下の通りです。

public void Save(string filename, ImageFormat format);

このメソッドは、指定したファイル名と画像形式を使って、Bitmapオブジェクトを保存します。

Saveメソッドの引数の説明

Saveメソッドには、以下の2つの引数があります。

スクロールできます
引数名説明
filenamestring保存するファイルのパスと名前
formatImageFormat保存する画像の形式
  • filename: 保存先のファイル名を指定します。

絶対パスまたは相対パスを使用できます。

  • format: 保存する画像の形式を指定します。

例えば、ImageFormat.BmpImageFormat.Pngなどがあります。

Saveメソッドの戻り値と例外処理

Saveメソッドは戻り値を持たず、成功した場合は何も返しません。

しかし、ファイルの保存中にエラーが発生する可能性があるため、例外処理を行うことが重要です。

主に以下の例外が考えられます。

  • ArgumentException: 無効な引数が指定された場合に発生します。
  • IOException: 入出力エラーが発生した場合に発生します。
  • UnauthorizedAccessException: ファイルへのアクセス権がない場合に発生します。

例外処理を行うことで、エラーの原因を特定し、適切な対応を行うことができます。

以下は、Saveメソッドを使用した際の例外処理のサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        try
        {
            Bitmap bitmap = new Bitmap(100, 100);
            // 画像を描画する処理
            bitmap.Save("output.bmp", ImageFormat.Bmp); // BMP形式で保存
            Console.WriteLine("画像を保存しました。");
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine("引数エラー: " + ex.Message);
        }
        catch (IOException ex)
        {
            Console.WriteLine("入出力エラー: " + ex.Message);
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("アクセス権エラー: " + ex.Message);
        }
    }
}
画像を保存しました。

このように、Saveメソッドを使用することで、簡単に画像を保存することができますが、例外処理を忘れずに行うことが重要です。

BMP形式で画像を保存する方法

BMP形式とは

BMP(Bitmap)形式は、ビットマップ画像を保存するためのファイル形式の一つです。

主に以下の特徴があります。

  • 非圧縮: BMP形式は非圧縮のため、画像の品質が高いですが、ファイルサイズが大きくなります。
  • 色深度: 1ビットから32ビットまでの色深度をサポートしており、様々な色表現が可能です。
  • 互換性: 多くのプラットフォームやアプリケーションでサポートされているため、互換性が高いです。

BMP形式で保存する際の注意点

BMP形式で画像を保存する際には、以下の点に注意が必要です。

スクロールできます
注意点説明
ファイルサイズ非圧縮のため、ファイルサイズが大きくなることがある。
色深度の選択適切な色深度を選択しないと、画像が正しく表示されないことがある。
保存先のパス保存先のパスが正しいか確認する必要がある。
アクセス権保存先フォルダへの書き込み権限が必要。

BMP形式での保存手順

BMP形式で画像を保存する手順は以下の通りです。

  1. Bitmapオブジェクトを作成する。
  2. 画像を描画する(必要に応じて)。
  3. Saveメソッドを使用して、BMP形式で保存する。
  4. 必要に応じて、例外処理を行う。

BMP形式で保存するコード例

以下は、C#でBMP形式の画像を保存するサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        try
        {
            // 100x100ピクセルのビットマップを作成
            Bitmap bitmap = new Bitmap(100, 100);
            
            // グラフィックスオブジェクトを取得
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                // 背景を白で塗りつぶす
                g.Clear(Color.White);
                
                // 赤い四角形を描画
                g.FillRectangle(Brushes.Red, 10, 10, 80, 80);
            }
            
            // BMP形式で画像を保存
            bitmap.Save("output.bmp", ImageFormat.Bmp); // BMP形式で保存
            Console.WriteLine("BMP形式で画像を保存しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラー: " + ex.Message);
        }
    }
}
BMP形式で画像を保存しました。

このコードでは、100×100ピクセルの白い背景に赤い四角形を描画し、output.bmpという名前でBMP形式で保存しています。

保存後、成功メッセージが表示されます。

他の画像形式での保存方法

PNG形式での保存

PNG(Portable Network Graphics)形式は、可逆圧縮を使用した画像形式で、透明度をサポートしています。

C#でPNG形式で画像を保存するには、ImageFormat.Pngを指定します。

以下は、PNG形式で画像を保存するサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        try
        {
            Bitmap bitmap = new Bitmap(100, 100);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.Clear(Color.White);
                g.FillRectangle(Brushes.Blue, 10, 10, 80, 80); // 青い四角形を描画
            }
            
            bitmap.Save("output.png", ImageFormat.Png); // PNG形式で保存
            Console.WriteLine("PNG形式で画像を保存しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラー: " + ex.Message);
        }
    }
}
PNG形式で画像を保存しました。

JPEG形式での保存

JPEG(Joint Photographic Experts Group)形式は、主に写真などのフルカラー画像に使用される圧縮形式です。

JPEG形式で保存する際は、ImageFormat.Jpegを指定します。

以下は、JPEG形式で画像を保存するサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        try
        {
            Bitmap bitmap = new Bitmap(100, 100);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.Clear(Color.White);
                g.FillEllipse(Brushes.Green, 10, 10, 80, 80); // 緑の円を描画
            }
            
            bitmap.Save("output.jpg", ImageFormat.Jpeg); // JPEG形式で保存
            Console.WriteLine("JPEG形式で画像を保存しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラー: " + ex.Message);
        }
    }
}
JPEG形式で画像を保存しました。

GIF形式での保存

GIF(Graphics Interchange Format)形式は、256色までの画像をサポートし、アニメーションを作成することも可能です。

GIF形式で保存するには、ImageFormat.Gifを指定します。

以下は、GIF形式で画像を保存するサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        try
        {
            Bitmap bitmap = new Bitmap(100, 100);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.Clear(Color.White);
                g.FillPolygon(Brushes.Yellow, new Point[] {
                    new Point(50, 10),
                    new Point(90, 90),
                    new Point(10, 90)
                }); // 黄色の三角形を描画
            }
            
            bitmap.Save("output.gif", ImageFormat.Gif); // GIF形式で保存
            Console.WriteLine("GIF形式で画像を保存しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラー: " + ex.Message);
        }
    }
}
GIF形式で画像を保存しました。

TIFF形式での保存

TIFF(Tagged Image File Format)形式は、高品質な画像を保存するための形式で、主に印刷業界で使用されます。

TIFF形式で保存するには、ImageFormat.Tiffを指定します。

以下は、TIFF形式で画像を保存するサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        try
        {
            Bitmap bitmap = new Bitmap(100, 100);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.Clear(Color.White);
                g.FillRectangle(Brushes.Purple, 10, 10, 80, 80); // 紫の四角形を描画
            }
            
            bitmap.Save("output.tiff", ImageFormat.Tiff); // TIFF形式で保存
            Console.WriteLine("TIFF形式で画像を保存しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラー: " + ex.Message);
        }
    }
}
TIFF形式で画像を保存しました。

これらのコードを使用することで、C#で様々な画像形式で画像を保存することができます。

それぞれの形式には特有の特徴があるため、用途に応じて使い分けることが重要です。

ファイルパスの指定方法

絶対パスと相対パスの違い

ファイルパスには、絶対パスと相対パスの2種類があります。

これらの違いは以下の通りです。

スクロールできます
パスの種類説明
絶対パスルートディレクトリからの完全なパスを指定します。例: C:\Images\output.bmp
相対パス現在の作業ディレクトリからの相対的なパスを指定します。例: output.bmp..\Images\output.bmp
  • 絶対パス: システムのどの場所からでも同じファイルを指し示すことができるため、ファイルの位置が明確です。
  • 相対パス: プロジェクト内でのファイルの位置を簡単に指定できるため、移動や共有が容易です。

ただし、作業ディレクトリによって異なるファイルを指す可能性があります。

ファイルパスの指定例

以下は、C#でファイルパスを指定する際の例です。

string absolutePath = @"C:\Images\output.bmp"; // 絶対パスの指定
string relativePath = @"output.bmp"; // 相対パスの指定
  • absolutePath: 絶対パスを使用して、特定の場所にファイルを保存します。
  • relativePath: プロジェクトのルートディレクトリにファイルを保存します。

ファイル名の自動生成方法

ファイル名を自動生成する方法はいくつかありますが、一般的には日付や時刻を使用することが多いです。

以下は、現在の日付と時刻を使用してファイル名を自動生成するサンプルコードです。

using System;
class Program
{
    static void Main()
    {
        // 現在の日付と時刻を取得
        string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
        
        // 自動生成されたファイル名
        string fileName = $"output_{timestamp}.bmp"; // 例: output_20230315_123456.bmp
        
        Console.WriteLine("自動生成されたファイル名: " + fileName);
    }
}
自動生成されたファイル名: output_20230315_123456.bmp

このコードでは、DateTime.Nowを使用して現在の日付と時刻を取得し、フォーマットを指定してファイル名を生成しています。

これにより、同じ名前のファイルが上書きされることを防ぎ、ユニークなファイル名を作成することができます。

応用例

メモリストリームを使用して画像を保存する

メモリストリームを使用すると、画像を一時的にメモリ内に保存し、ファイルシステムに書き込むことなく操作することができます。

以下は、メモリストリームを使用して画像を保存するサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
class Program
{
    static void Main()
    {
        Bitmap bitmap = new Bitmap(100, 100);
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            g.Clear(Color.White);
            g.FillRectangle(Brushes.Red, 10, 10, 80, 80); // 赤い四角形を描画
        }
        using (MemoryStream memoryStream = new MemoryStream())
        {
            bitmap.Save(memoryStream, ImageFormat.Png); // メモリストリームにPNG形式で保存
            Console.WriteLine("メモリストリームに画像を保存しました。");
        }
    }
}
メモリストリームに画像を保存しました。

画像の圧縮と保存

画像を圧縮して保存することで、ファイルサイズを小さくすることができます。

JPEG形式で保存する際に圧縮率を指定することが可能です。

以下は、画像を圧縮して保存するサンプルコードです。

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
class Program
{
    static void Main()
    {
        Bitmap bitmap = new Bitmap(100, 100);
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            g.Clear(Color.White);
            g.FillEllipse(Brushes.Blue, 10, 10, 80, 80); // 青い円を描画
        }
        // JPEG形式で保存する際の圧縮率を指定
        var qualityParam = new EncoderParameter(Encoder.Quality, 50L); // 50%の圧縮
        var jpegCodec = GetEncoder(ImageFormat.Jpeg);
        var encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;
        bitmap.Save("output_compressed.jpg", jpegCodec, encoderParams); // 圧縮して保存
        Console.WriteLine("圧縮した画像を保存しました。");
    }
    private static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
        foreach (ImageCodecInfo codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }
        return null;
    }
}
圧縮した画像を保存しました。

画像のリサイズ後に保存する

画像をリサイズして保存することで、必要なサイズに調整することができます。

以下は、画像をリサイズして保存するサンプルコードです。

using System;
using System.Drawing;
class Program
{
    static void Main()
    {
        Bitmap originalBitmap = new Bitmap("input.bmp"); // 元の画像を読み込む
        Bitmap resizedBitmap = new Bitmap(originalBitmap, new Size(50, 50)); // 50x50にリサイズ
        resizedBitmap.Save("output_resized.bmp", ImageFormat.Bmp); // リサイズした画像を保存
        Console.WriteLine("リサイズした画像を保存しました。");
    }
}
リサイズした画像を保存しました。

画像の回転や反転後に保存する

画像を回転または反転させて保存することも可能です。

以下は、画像を90度回転させて保存するサンプルコードです。

using System;
using System.Drawing;
class Program
{
    static void Main()
    {
        Bitmap originalBitmap = new Bitmap("input.bmp"); // 元の画像を読み込む
        originalBitmap.RotateFlip(RotateFlipType.Rotate90FlipNone); // 90度回転
        originalBitmap.Save("output_rotated.bmp", ImageFormat.Bmp); // 回転した画像を保存
        Console.WriteLine("回転した画像を保存しました。");
    }
}
回転した画像を保存しました。

このように、C#を使用して画像をメモリストリームに保存したり、圧縮、リサイズ、回転などの操作を行った後に保存することができます。

これらの応用例を活用することで、画像処理の幅が広がります。

よくある質問

Saveメソッドで例外が発生するのはなぜ?

Saveメソッドで例外が発生する主な理由は以下の通りです。

  • 無効な引数: filenameformatに無効な値が指定された場合、ArgumentExceptionが発生します。
  • 入出力エラー: ファイルシステムにアクセスできない場合や、ディスクがいっぱいの場合、IOExceptionが発生します。
  • アクセス権の問題: 保存先のフォルダに書き込み権限がない場合、UnauthorizedAccessExceptionが発生します。
  • ファイル名の重複: 同名のファイルが既に存在し、上書きが許可されていない場合、エラーが発生することがあります。

これらの例外を適切に処理することで、エラーの原因を特定し、プログラムの安定性を向上させることができます。

保存した画像が正しく表示されないのはなぜ?

保存した画像が正しく表示されない原因はいくつか考えられます。

  • ファイル形式の不一致: 保存時に指定した形式と実際の画像データが一致しない場合、表示に問題が生じることがあります。

例えば、BMP形式で保存したのにJPEG形式として開こうとすると、表示されません。

  • 破損したファイル: 保存中にエラーが発生した場合、ファイルが破損することがあります。

この場合、画像が正しく表示されません。

  • プログラムのバグ: 画像を描画するプログラムにバグがある場合、正しく表示されないことがあります。

特に、描画処理やファイルの読み込み処理に注意が必要です。

  • 互換性の問題: 使用している画像ビューアが特定の画像形式に対応していない場合、表示できないことがあります。

ファイル形式を指定しない場合、どの形式で保存される?

Saveメソッドでファイル形式を指定しない場合、C#はファイル名の拡張子に基づいて形式を判断します。

例えば、以下のような場合です。

  • 拡張子が.bmp: BMP形式で保存されます。
  • 拡張子が.png: PNG形式で保存されます。
  • 拡張子が.jpgまたは.jpeg: JPEG形式で保存されます。
  • 拡張子が.gif: GIF形式で保存されます。
  • 拡張子が.tiffまたは.tif: TIFF形式で保存されます。

拡張子が指定されていない場合、ArgumentExceptionが発生することがありますので、必ず適切な拡張子を付けることが重要です。

まとめ

この記事では、C#のBitmapクラスSaveメソッドを使用して、画像を様々な形式で保存する方法について詳しく解説しました。

特に、BMP形式を中心に、PNG、JPEG、GIF、TIFF形式での保存方法や、ファイルパスの指定方法、画像のリサイズや圧縮、メモリストリームの活用など、実践的な応用例を紹介しました。

これらの知識を活用することで、画像処理の幅を広げ、より効果的なプログラムを作成することが可能になります。

ぜひ、実際にコードを試してみて、画像保存の技術を自分のプロジェクトに取り入れてみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 画像 (21)
  • URLをコピーしました!
目次から探す