[C#] JPEG画像の読み込み方法
C#でJPEG画像を読み込むには、System.Drawing
名前空間のBitmapクラス
を使用します。
まず、System.Drawing.Common
パッケージをプロジェクトに追加します。
次に、Bitmapクラス
のインスタンスを作成し、JPEGファイルのパスを指定して画像を読み込みます。
例えば、Bitmap bitmap = new Bitmap("path/to/image.jpg");
のように記述します。
このbitmap
オブジェクトを使用して画像の操作や表示が可能です。
ただし、System.Drawing
はWindows環境に依存するため、クロスプラットフォームのプロジェクトではImageSharp
などのライブラリを検討することもあります。
JPEG画像の読み込み方法
System.Drawingを使用した基本的な読み込み
Bitmapクラスの概要
Bitmapクラス
は、画像をメモリ上に表現するためのクラスです。
このクラスを使用することで、画像の読み込み、描画、編集が可能になります。
特に、JPEG画像の読み込みにおいては、Bitmapクラス
が非常に便利です。
JPEG画像の読み込み手順
JPEG画像を読み込むためには、Bitmapクラス
を使用します。
以下に基本的な読み込み手順を示します。
using System;
using System.Drawing;
class Program
{
static void Main()
{
// JPEG画像のファイルパスを指定
string filePath = "sample.jpg";
// Bitmapクラスを使用して画像を読み込む
Bitmap image = new Bitmap(filePath);
// 画像の幅と高さを表示
Console.WriteLine("画像の幅: " + image.Width);
Console.WriteLine("画像の高さ: " + image.Height);
}
}
画像の幅: 800
画像の高さ: 600
このコードは、指定したJPEG画像の幅と高さをコンソールに表示します。
読み込んだ画像の基本操作
読み込んだ画像に対して、さまざまな操作が可能です。
以下にいくつかの基本操作を示します。
- 画像の保存:
image.Save("newImage.jpg");
- 画像の一部を切り取る:
image.Clone(new Rectangle(0, 0, 100, 100), image.PixelFormat);
- 画像の回転:
image.RotateFlip(RotateFlipType.Rotate90FlipNone);
System.Drawing.Commonパッケージのインストール
NuGetパッケージマネージャーの使用方法
System.Drawing.Common
は、.NET Coreや.NET 5以降でSystem.Drawing
名前空間を使用するために必要なパッケージです。
NuGetパッケージマネージャーを使用してインストールします。
- Visual Studioを開き、プロジェクトを選択します。
- メニューから「ツール」→「NuGet パッケージ マネージャー」→「ソリューションの NuGet パッケージの管理」を選択します。
- 「参照」タブで
System.Drawing.Common
を検索し、インストールします。
パッケージのインストール手順
コマンドラインからもインストール可能です。
以下のコマンドを使用します。
dotnet add package System.Drawing.Common
このコマンドを実行することで、プロジェクトにSystem.Drawing.Common
パッケージが追加されます。
画像の表示と操作
PictureBoxを使用した画像表示
Windowsフォームアプリケーションで画像を表示するには、PictureBox
コントロールを使用します。
以下に基本的な使用例を示します。
using System;
using System.Windows.Forms;
using System.Drawing;
class ImageForm : Form
{
public ImageForm()
{
// PictureBoxを作成
PictureBox pictureBox = new PictureBox();
// 画像を読み込む
Bitmap image = new Bitmap("sample.jpg");
// PictureBoxに画像を設定
pictureBox.Image = image;
// PictureBoxのサイズを設定
pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox.Dock = DockStyle.Fill;
// フォームにPictureBoxを追加
this.Controls.Add(pictureBox);
}
static void Main()
{
Application.Run(new ImageForm());
}
}
このコードは、WindowsフォームアプリケーションでJPEG画像を表示します。
画像のサイズ変更と回転
画像のサイズ変更や回転は、Bitmapクラス
のメソッドを使用して行います。
- サイズ変更:
image = new Bitmap(image, new Size(200, 200));
- 回転:
image.RotateFlip(RotateFlipType.Rotate180FlipNone);
画像のピクセルデータへのアクセス
画像のピクセルデータにアクセスすることで、画像の色を変更したり、フィルタを適用することができます。
using System;
using System.Drawing;
class Program
{
static void Main()
{
Bitmap image = new Bitmap("sample.jpg");
// 画像のピクセルデータにアクセス
for (int y = 0; y < image.Height; y++)
{
for (int x = 0; x < image.Width; x++)
{
// ピクセルの色を取得
Color pixelColor = image.GetPixel(x, y);
// 色を反転
Color invertedColor = Color.FromArgb(255 - pixelColor.R, 255 - pixelColor.G, 255 - pixelColor.B);
// ピクセルの色を設定
image.SetPixel(x, y, invertedColor);
}
}
// 変更した画像を保存
image.Save("inverted_sample.jpg");
}
}
このコードは、画像の色を反転させ、新しいファイルとして保存します。
クロスプラットフォームでのJPEG画像の読み込み
ImageSharpライブラリの利用
ImageSharpのインストール方法
ImageSharp
は、クロスプラットフォームで画像処理を行うためのライブラリです。
以下の手順でインストールします。
- コマンドラインで以下のコマンドを実行します。
dotnet add package SixLabors.ImageSharp
このコマンドにより、ImageSharp
ライブラリがプロジェクトに追加されます。
JPEG画像の読み込みと操作
ImageSharp
を使用してJPEG画像を読み込む方法を示します。
using System;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
class Program
{
static void Main()
{
// 画像を読み込む
using (Image<Rgba32> image = Image.Load<Rgba32>("sample.jpg"))
{
// 画像の幅と高さを表示
Console.WriteLine("画像の幅: " + image.Width);
Console.WriteLine("画像の高さ: " + image.Height);
// 画像をグレースケールに変換
image.Mutate(x => x.Grayscale());
// 変更した画像を保存
image.Save("grayscale_sample.jpg");
}
}
}
画像の幅: 800
画像の高さ: 600
このコードは、JPEG画像を読み込み、グレースケールに変換して保存します。
SkiaSharpライブラリの利用
SkiaSharpのインストール方法
SkiaSharp
は、GoogleのSkiaグラフィックスライブラリを基にしたクロスプラットフォームの画像処理ライブラリです。
以下の手順でインストールします。
- コマンドラインで以下のコマンドを実行します。
dotnet add package SkiaSharp
このコマンドにより、SkiaSharp
ライブラリがプロジェクトに追加されます。
JPEG画像の読み込みと描画
SkiaSharp
を使用してJPEG画像を読み込む方法を示します。
using System;
using System.IO;
using SkiaSharp;
class Program
{
static void Main()
{
// 画像ファイルを読み込む
using (var inputStream = File.OpenRead("sample.jpg"))
{
// SKBitmapを使用して画像を読み込む
using (var bitmap = SKBitmap.Decode(inputStream))
{
// 画像の幅と高さを表示
Console.WriteLine("画像の幅: " + bitmap.Width);
Console.WriteLine("画像の高さ: " + bitmap.Height);
// 画像を反転
using (var surface = new SKCanvas(bitmap))
{
surface.Scale(-1, 1, bitmap.Width / 2, 0);
surface.DrawBitmap(bitmap, 0, 0);
}
// 変更した画像を保存
using (var outputStream = File.OpenWrite("flipped_sample.jpg"))
{
bitmap.Encode(outputStream, SKEncodedImageFormat.Jpeg, 100);
}
}
}
}
}
このコードは、JPEG画像を読み込み、水平に反転させて保存します。
応用例
画像のフォーマット変換
JPEGからPNGへの変換
画像のフォーマットを変換することで、異なる用途に応じた画像形式を利用できます。
以下に、JPEG画像をPNG形式に変換する方法を示します。
using System;
using System.Drawing;
class Program
{
static void Main()
{
// JPEG画像を読み込む
using (Bitmap jpegImage = new Bitmap("sample.jpg"))
{
// PNG形式で保存
jpegImage.Save("converted_sample.png", System.Drawing.Imaging.ImageFormat.Png);
}
}
}
このコードは、JPEG画像を読み込み、PNG形式で保存します。
画像の圧縮と品質調整
画像の圧縮と品質調整は、ファイルサイズを削減しつつ、画質を維持するために重要です。
以下に、JPEG画像の圧縮と品質調整の方法を示します。
using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
static void Main()
{
// JPEG画像を読み込む
using (Bitmap image = new Bitmap("sample.jpg"))
{
// エンコーダーのパラメータを設定
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters encoderParams = new EncoderParameters(1);
EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, 50L); // 品質を50に設定
encoderParams.Param[0] = qualityParam;
// 圧縮した画像を保存
image.Save("compressed_sample.jpg", jpgEncoder, encoderParams);
}
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
}
このコードは、JPEG画像を50%の品質で圧縮して保存します。
画像のフィルタリングとエフェクト
グレースケール変換
画像をグレースケールに変換することで、色の情報を削除し、明暗のみに焦点を当てた画像を作成できます。
using System;
using System.Drawing;
class Program
{
static void Main()
{
// 画像を読み込む
using (Bitmap image = new Bitmap("sample.jpg"))
{
// グレースケールに変換
for (int y = 0; y < image.Height; y++)
{
for (int x = 0; x < image.Width; x++)
{
Color originalColor = image.GetPixel(x, y);
int grayScale = (int)((originalColor.R * 0.3) + (originalColor.G * 0.59) + (originalColor.B * 0.11));
Color grayColor = Color.FromArgb(grayScale, grayScale, grayScale);
image.SetPixel(x, y, grayColor);
}
}
// 変換した画像を保存
image.Save("grayscale_sample.jpg");
}
}
}
このコードは、画像をグレースケールに変換して保存します。
ぼかし効果の適用
ぼかし効果を適用することで、画像の一部を柔らかくし、視覚的な焦点を変えることができます。
using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
static void Main()
{
// 画像を読み込む
using (Bitmap image = new Bitmap("sample.jpg"))
{
// ぼかしフィルタを適用
using (Graphics graphics = Graphics.FromImage(image))
{
System.Drawing.Imaging.ImageAttributes attributes = new System.Drawing.Imaging.ImageAttributes();
float[][] colorMatrixElements = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 0.5f, 0}, // 透明度を調整
new float[] {0, 0, 0, 0, 1}
};
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
attributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
graphics.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
}
// ぼかしを適用した画像を保存
image.Save("blurred_sample.jpg");
}
}
}
このコードは、画像にぼかし効果を適用して保存します。
画像のメタデータの読み取り
EXIF情報の取得
画像には、撮影日時やカメラの設定などのEXIF情報が含まれていることがあります。
以下に、EXIF情報を取得する方法を示します。
using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
static void Main()
{
// 画像を読み込む
using (Bitmap image = new Bitmap("sample.jpg"))
{
// EXIF情報を取得
foreach (PropertyItem propItem in image.PropertyItems)
{
Console.WriteLine("ID: " + propItem.Id + ", Type: " + propItem.Type + ", Length: " + propItem.Len);
}
}
}
}
このコードは、画像のEXIF情報をコンソールに表示します。
メタデータの編集
画像のメタデータを編集することで、画像に関する情報を追加または変更できます。
using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
static void Main()
{
// 画像を読み込む
using (Bitmap image = new Bitmap("sample.jpg"))
{
// 新しいメタデータを作成
PropertyItem propItem = (PropertyItem)FormatterServices.GetUninitializedObject(typeof(PropertyItem));
propItem.Id = 0x010E; // 画像の説明
propItem.Type = 2; // ASCII文字列
propItem.Value = System.Text.Encoding.ASCII.GetBytes("新しい説明\0");
propItem.Len = propItem.Value.Length;
// メタデータを設定
image.SetPropertyItem(propItem);
// 変更した画像を保存
image.Save("edited_metadata_sample.jpg");
}
}
}
このコードは、画像のメタデータに新しい説明を追加して保存します。
まとめ
この記事では、C#を用いたJPEG画像の読み込み方法について、System.Drawing
やクロスプラットフォーム対応のImageSharp
、SkiaSharp
といったライブラリを活用する手法を詳しく解説しました。
これにより、画像のフォーマット変換やフィルタリング、メタデータの操作といった応用的な画像処理も可能であることがわかります。
これらの知識を基に、実際のプロジェクトで画像処理を試みることで、より高度なプログラミングスキルを身につけることが期待されます。