[C#] JPEGからBMPへの変換方法

C#でJPEG画像をBMP形式に変換するには、System.Drawing名前空間を使用します。

まず、Bitmapクラスを用いてJPEGファイルを読み込みます。

次に、Saveメソッドを使用してBMP形式で保存します。

具体的には、Bitmapオブジェクトを作成し、JPEGファイルのパスを指定して読み込みます。

その後、SaveメソッドにBMP形式のファイルパスとImageFormat.Bmpを指定して保存します。

これにより、JPEG画像がBMP形式に変換されます。

なお、System.DrawingはWindows環境での使用が推奨されており、クロスプラットフォームのプロジェクトではImageSharpなどのライブラリを検討することができます。

この記事でわかること
  • C#での画像処理におけるSystem.Drawing名前空間の役割
  • JPEG画像をBMP形式に変換する具体的な手順
  • 複数画像の一括変換やリサイズを含む応用例
  • 画像フォーマット変換ツールの基本的な作成方法

目次から探す

C#での画像処理の基本

C#では、画像処理を行うための便利なクラスやメソッドが用意されています。

特に、System.Drawing名前空間は、画像の読み込みや保存、描画などの基本的な操作をサポートしています。

ここでは、System.Drawing名前空間の主要なクラスとその基本的な使い方について解説します。

System.Drawing名前空間の紹介

System.Drawing名前空間は、C#で画像やグラフィックスを扱うための基本的な機能を提供します。

この名前空間には、画像の描画、編集、保存に必要なクラスが含まれています。

以下は、System.Drawing名前空間でよく使用されるクラスの一覧です。

スクロールできます
クラス名説明
Bitmap画像をメモリ上に表現するためのクラス
Graphics描画操作を行うためのクラス
Image画像の基本的なプロパティとメソッドを提供するクラス
ImageFormat画像のフォーマットを指定するためのクラス

Bitmapクラスの基本操作

Bitmapクラスは、画像をメモリ上に表現し、操作するためのクラスです。

画像の読み込みや保存、ピクセル単位での操作が可能です。

以下に、Bitmapクラスを使用した基本的な操作の例を示します。

using System;
using System.Drawing;
class Program
{
    static void Main()
    {
        // 画像ファイルを読み込む
        Bitmap bitmap = new Bitmap("sample.jpg");
        
        // 画像の幅と高さを取得する
        int width = bitmap.Width;
        int height = bitmap.Height;
        
        // 画像を保存する
        bitmap.Save("output.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
        
        // リソースを解放する
        bitmap.Dispose();
    }
}

このコードでは、JPEG形式の画像を読み込み、BMP形式で保存しています。

Bitmapクラスを使用することで、画像の幅や高さを簡単に取得することができます。

ImageFormatクラスの利用

ImageFormatクラスは、画像のフォーマットを指定するために使用されます。

Bitmap.Saveメソッドを使用して画像を保存する際に、保存するフォーマットを指定することができます。

以下に、ImageFormatクラスを使用した例を示します。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        // 画像ファイルを読み込む
        Bitmap bitmap = new Bitmap("sample.jpg");
        
        // 画像をPNG形式で保存する
        bitmap.Save("output.png", ImageFormat.Png);
        
        // リソースを解放する
        bitmap.Dispose();
    }
}

このコードでは、JPEG形式の画像をPNG形式で保存しています。

ImageFormatクラスを使用することで、BMP、JPEG、PNGなど、さまざまなフォーマットで画像を保存することが可能です。

JPEGからBMPへの変換手順

C#を使用してJPEG画像をBMP形式に変換する手順について解説します。

このプロセスは、画像の読み込み、変換、保存の3つのステップで構成されます。

以下では、それぞれのステップについて詳しく説明します。

JPEG画像の読み込み

まず、JPEG画像を読み込む必要があります。

Bitmapクラスを使用することで、簡単に画像をメモリ上にロードすることができます。

以下に、JPEG画像を読み込むためのサンプルコードを示します。

using System;
using System.Drawing;
class Program
{
    static void Main()
    {
        // JPEG画像を読み込む
        Bitmap jpegImage = new Bitmap("input.jpg");
        
        // 画像の幅と高さを表示する
        Console.WriteLine($"画像の幅: {jpegImage.Width}, 高さ: {jpegImage.Height}");
        
        // リソースを解放する
        jpegImage.Dispose();
    }
}

このコードでは、Bitmapクラスを使用してJPEG画像を読み込み、その幅と高さをコンソールに表示しています。

Bitmapクラスは、画像の基本的なプロパティにアクセスするための便利なクラスです。

BMP形式での保存

次に、読み込んだJPEG画像をBMP形式で保存します。

Bitmap.Saveメソッドを使用して、画像を指定したフォーマットで保存することができます。

以下に、BMP形式で画像を保存するためのサンプルコードを示します。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        // JPEG画像を読み込む
        Bitmap jpegImage = new Bitmap("input.jpg");
        
        // BMP形式で画像を保存する
        jpegImage.Save("output.bmp", ImageFormat.Bmp);
        
        // リソースを解放する
        jpegImage.Dispose();
    }
}

このコードでは、JPEG画像をBMP形式で保存しています。

ImageFormat.Bmpを指定することで、画像をBMP形式で保存することができます。

変換時の注意点

JPEGからBMPへの変換時には、いくつかの注意点があります。

  • ファイルサイズの増加: BMP形式は非圧縮形式であるため、JPEG形式に比べてファイルサイズが大きくなることがあります。

ストレージ容量に注意が必要です。

  • 画質の変化: JPEGは圧縮形式であるため、変換後のBMP画像は元のJPEG画像よりも画質が劣化することはありませんが、逆に画質が向上することもありません。
  • リソースの解放: Bitmapオブジェクトを使用した後は、必ずDisposeメソッドを呼び出してリソースを解放するようにしましょう。

これにより、メモリリークを防ぐことができます。

これらの注意点を考慮しながら、JPEGからBMPへの変換を行うことで、画像処理を効率的に行うことができます。

より詳細なサンプルコード

ここでは、JPEG画像をBMP形式に変換するためのサンプルコードを詳しく解説します。

各ステップでのコードの役割と、実装上のポイントについて説明します。

JPEG画像の読み込みコード

JPEG画像を読み込むためには、Bitmapクラスを使用します。

このクラスは、画像をメモリ上にロードし、画像のプロパティにアクセスするための基本的な機能を提供します。

using System;
using System.Drawing;
class Program
{
    static void Main()
    {
        try
        {
            // JPEG画像を読み込む
            Bitmap jpegImage = new Bitmap("input.jpg");
            
            // 画像の幅と高さを表示する
            Console.WriteLine($"画像の幅: {jpegImage.Width}, 高さ: {jpegImage.Height}");
            
            // リソースを解放する
            jpegImage.Dispose();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"画像の読み込み中にエラーが発生しました: {ex.Message}");
        }
    }
}

このコードでは、Bitmapクラスを使用してJPEG画像を読み込み、その幅と高さをコンソールに表示しています。

try-catchブロックを使用して、画像の読み込み中に発生する可能性のある例外をキャッチし、エラーメッセージを表示しています。

BMP形式での保存コード

読み込んだJPEG画像をBMP形式で保存するには、Bitmap.Saveメソッドを使用します。

このメソッドは、画像を指定したフォーマットで保存するための機能を提供します。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        try
        {
            // JPEG画像を読み込む
            Bitmap jpegImage = new Bitmap("input.jpg");
            
            // BMP形式で画像を保存する
            jpegImage.Save("output.bmp", ImageFormat.Bmp);
            
            // リソースを解放する
            jpegImage.Dispose();
            
            Console.WriteLine("画像が正常にBMP形式で保存されました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"画像の保存中にエラーが発生しました: {ex.Message}");
        }
    }
}

このコードでは、ImageFormat.Bmpを指定してJPEG画像をBMP形式で保存しています。

保存が成功した場合には、コンソールに成功メッセージを表示します。

エラーハンドリングの実装

画像の読み込みや保存の際には、ファイルが存在しない、アクセス権がない、ディスク容量が不足しているなど、さまざまなエラーが発生する可能性があります。

これらのエラーを適切に処理するために、try-catchブロックを使用します。

  • 例外のキャッチ: try-catchブロックを使用して、Bitmapクラスの操作中に発生する例外をキャッチします。
  • エラーメッセージの表示: 例外が発生した場合には、catchブロック内でエラーメッセージを表示します。

例:Console.WriteLine($"エラー: {ex.Message}");

  • リソースの解放: 例外が発生しても、finallyブロックを使用してDisposeメソッドを呼び出し、リソースを確実に解放します。

これにより、プログラムの安定性を向上させ、予期しないエラーによるクラッシュを防ぐことができます。

応用例

JPEGからBMPへの変換は、基本的な画像処理の一部に過ぎません。

ここでは、C#を使用した画像処理の応用例として、複数画像の一括変換、画像のリサイズと変換、画像のフォーマット変換ツールの作成について解説します。

複数画像の一括変換

複数のJPEG画像を一括でBMP形式に変換することは、手作業での変換を自動化するために非常に便利です。

以下のコードは、指定したディレクトリ内のすべてのJPEG画像をBMP形式に変換する例です。

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
class Program
{
    static void Main()
    {
        string inputDirectory = "input_images";
        string outputDirectory = "output_images";
        // 出力ディレクトリが存在しない場合は作成する
        if (!Directory.Exists(outputDirectory))
        {
            Directory.CreateDirectory(outputDirectory);
        }
        // 入力ディレクトリ内のすべてのJPEGファイルを取得する
        string[] files = Directory.GetFiles(inputDirectory, "*.jpg");
        foreach (string file in files)
        {
            try
            {
                // JPEG画像を読み込む
                Bitmap jpegImage = new Bitmap(file);
                // 出力ファイル名を生成する
                string outputFileName = Path.Combine(outputDirectory, Path.GetFileNameWithoutExtension(file) + ".bmp");
                // BMP形式で画像を保存する
                jpegImage.Save(outputFileName, ImageFormat.Bmp);
                // リソースを解放する
                jpegImage.Dispose();
                Console.WriteLine($"{file} を {outputFileName} に変換しました。");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"エラー: {file} の変換中に問題が発生しました: {ex.Message}");
            }
        }
    }
}

このコードは、指定した入力ディレクトリ内のすべてのJPEGファイルを取得し、それぞれをBMP形式に変換して出力ディレクトリに保存します。

画像のリサイズと変換

画像を変換する際に、同時にリサイズを行うことも可能です。

以下のコードは、JPEG画像を読み込み、指定したサイズにリサイズしてからBMP形式で保存する例です。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main()
    {
        string inputFile = "input.jpg";
        string outputFile = "resized_output.bmp";
        int newWidth = 800;
        int newHeight = 600;
        try
        {
            // JPEG画像を読み込む
            Bitmap jpegImage = new Bitmap(inputFile);
            // 新しいサイズのBitmapを作成する
            Bitmap resizedImage = new Bitmap(jpegImage, new Size(newWidth, newHeight));
            // BMP形式で画像を保存する
            resizedImage.Save(outputFile, ImageFormat.Bmp);
            // リソースを解放する
            jpegImage.Dispose();
            resizedImage.Dispose();
            Console.WriteLine($"画像をリサイズして {outputFile} に保存しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"エラー: 画像のリサイズ中に問題が発生しました: {ex.Message}");
        }
    }
}

このコードでは、画像を指定した幅と高さにリサイズし、BMP形式で保存しています。

画像のフォーマット変換ツールの作成

画像のフォーマット変換を自動化するツールを作成することで、ユーザーは簡単に画像の形式を変更できます。

以下は、コマンドライン引数を使用して入力ファイルと出力形式を指定する簡単なツールの例です。

using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
    static void Main(string[] args)
    {
        if (args.Length < 2)
        {
            Console.WriteLine("使用法: ImageConverter <入力ファイル> <出力形式>");
            return;
        }
        string inputFile = args[0];
        string outputFormat = args[1].ToLower();
        string outputFile = System.IO.Path.ChangeExtension(inputFile, outputFormat);
        try
        {
            // 画像を読み込む
            Bitmap image = new Bitmap(inputFile);
            // 出力形式に応じて画像を保存する
            switch (outputFormat)
            {
                case "bmp":
                    image.Save(outputFile, ImageFormat.Bmp);
                    break;
                case "png":
                    image.Save(outputFile, ImageFormat.Png);
                    break;
                case "jpg":
                case "jpeg":
                    image.Save(outputFile, ImageFormat.Jpeg);
                    break;
                default:
                    Console.WriteLine("サポートされていない形式です。");
                    return;
            }
            // リソースを解放する
            image.Dispose();
            Console.WriteLine($"画像を {outputFile} に変換しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"エラー: 画像の変換中に問題が発生しました: {ex.Message}");
        }
    }
}

このツールは、コマンドラインから入力ファイルと出力形式を指定することで、画像を指定した形式に変換します。

サポートされている形式は、BMP、PNG、JPEGです。

よくある質問

変換時に画質は劣化しますか?

JPEGからBMPへの変換では、画質の劣化は発生しません。

これは、JPEGが圧縮形式であるのに対し、BMPが非圧縮形式であるためです。

JPEG画像をBMP形式に変換する際には、元のJPEG画像の画質がそのまま保持されます。

ただし、BMP形式はファイルサイズが大きくなるため、ストレージ容量に注意が必要です。

他の画像形式にも変換できますか?

はい、C#を使用して他の画像形式にも変換することが可能です。

System.Drawing.Imaging.ImageFormatクラスを使用することで、PNG、GIF、TIFFなど、さまざまな画像形式に変換できます。

例:image.Save("output.png", ImageFormat.Png);とすることで、画像をPNG形式で保存できます。

クロスプラットフォームでの実装は可能ですか?

System.Drawing名前空間は、Windows環境での使用を前提としているため、クロスプラットフォームでの実装には制限があります。

しかし、.NET Coreや.NET 5以降では、System.Drawing.Commonパッケージを使用することで、LinuxやmacOSでも一部の機能を利用することができます。

ただし、完全な互換性を求める場合は、ImageSharpSkiaSharpなどのクロスプラットフォーム対応のライブラリを検討することをお勧めします。

まとめ

この記事では、C#を用いたJPEGからBMPへの画像変換の基本的な手順と応用例について詳しく解説しました。

画像処理の基礎から始まり、複数画像の一括変換やリサイズ、フォーマット変換ツールの作成まで、実践的な内容を含んでいます。

これを機に、C#での画像処理に挑戦し、さらなるスキルアップを目指してみてはいかがでしょうか。

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

関連カテゴリーから探す

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