画像のリサイズや切り抜き、回転、色調補正などの画像処理は、現場の写真や紙文書などを画像として取り扱う業務システムにおいて欠かせない機能のひとつです。しかし、これらを一から実装するには多くの工数が必要になります。
DioDocs for Imaging(ディオドック)は、.NETアプリケーション開発向けの画像処理ライブラリです。C#やVB.NETから画像の生成・編集・保存を行うための包括的なAPIを提供し、Windows・Linux・macOSに対応しています。さらに、AzureやAWS、Google Cloudなど各パブリッククラウドで .NETが動作するサービス(Azure Functions、AWS Lambdaなど)でも利用できます。
本記事では、DioDocs for Imagingの代表的な機能を紹介します。
目次
事前準備
Visual Studioでコンソールアプリを作成して、DioDocs for ImagingのNuGetパッケージ(DioDocs.Imaging.ja)を追加しておきます。

DioDocs for Imagingでは、GcBitmapクラスを使用して各種画像処理を実装することができます。
画像をリサイズする
GcBitmapクラスのResizeメソッドを使用して画像をリサイズします。
// 画像を読み込み
var bmp = new GcBitmap();
bmp.Load("test.jpg");
// リサイズ
var resizebmp = bmp.Resize(
bmp.PixelWidth / 2,
bmp.PixelHeight / 2,
InterpolationMode.Linear);
// 保存
resizebmp.SaveAsJpeg("resize.jpg");Loadメソッドで画像ファイルを読み込むResizeメソッドでリサイズを実行。引数でサイズと補間方法を指定SaveAsXXXXメソッドで画像ファイルを保存する
といった手順で画像をリサイズすることができます。保存する際の画像フォーマットに応じてSaveAsJpegやSaveAsPngメソッドを使い分けます。

画像をトリミング(切り抜き)する
GcBitmapクラスのClipメソッドを使用して画像を切り抜きます。
// 画像を読み込み
var bmp = new GcBitmap();
bmp.Load("test.jpg");
// 切り抜き
var cropbmp = bmp.Clip(new Rectangle(500, 500, 800, 800));
// 保存
cropbmp.SaveAsJpeg("crop.jpg");Loadメソッドで画像ファイルを読み込むClipメソッドで切り抜きを実行。引数で切り取る矩形の位置とサイズを指定SaveAsXXXXメソッドで画像ファイルを保存する
といった手順で画像を切り抜くことができます。

画像を回転・反転する
GcBitmapクラスのFlipRotateメソッドを使用して画像を回転・反転します。
// 画像を読み込み
var bmp = new GcBitmap();
bmp.Load("test.jpg");
// 90度回転
var rotate90bmp = bmp.FlipRotate(FlipRotateAction.Rotate90);
// 上下反転
var flipverticalbmp = bmp.FlipRotate(FlipRotateAction.FlipVertical);
// 左右回転
var fliphorizontalbmp = bmp.FlipRotate(FlipRotateAction.FlipHorizontal);
// 保存
rotate90bmp.SaveAsJpeg("rotate90.jpg");
flipverticalbmp.SaveAsJpeg("flipvertical.jpg");
fliphorizontalbmp.SaveAsJpeg("fliphorizontal.jpg");Loadメソッドで画像ファイルを読み込むFlipRotateメソッドで回転・反転を実行。引数で回転や反転を指定SaveAsXXXXメソッドで画像ファイルを保存する
といった手順で画像を回転・反転することができます。


画像の色調を調整・エフェクトを適用
グレースケール化・二値化(モノクロ化)を適用
GcBitmapクラスのToGrayscaleBitmap、ToBilevelBitmapメソッドを使用して画像をグレースケール、二値化します。
// 画像を読み込み
var bmp2 = new GcBitmap();
bmp2.Load("test2.jpg");
// グレースケール化
var graybmp = bmp2.ToGrayscaleBitmap();
// モノクロ化(二値化)
var binarybmp = bmp2.ToBilevelBitmap();
// 保存
graybmp.ToGcBitmap().SaveAsTiff("gray.tif");
binarybmp.ToGcBitmap().SaveAsTiff("binary.tif");Loadメソッドで画像ファイルを読み込むToGrayscaleBitmap、ToBilevelBitmapメソッドでグレースケール化・二値化を実行SaveAsXXXXメソッドで画像ファイルを保存する
といった手順で画像をグレースケール化・二値化することができます。


エフェクトを適用
GcBitmapクラスのApplyEffectメソッドを使用して画像にエフェクトを適用します。
// 画像を読み込み
var bmp3 = new GcBitmap();
bmp3.Load("test3.jpg");
// 明るさとコントラストを調整
bmp3.ApplyEffect(BrightnessContrastEffect.Get(30, 20));
// 彩度を調整
bmp3.ApplyEffect(SaturationEffect.Get(1.5f));
// 保存
bmp3.SaveAsPng("adjusted.png");Loadメソッドで画像ファイルを読み込むApplyEffectメソッドでエフェクトを適用。引数で適用するエフェクトを指定SaveAsXXXXメソッドで画像ファイルを保存する
といった手順で画像にエフェクトを適用することができます。

画像にテキストを描画
GcBitmapGraphicsクラスのDrawStringメソッドを使用して画像にテキストを描画します。
// 画像を読み込み
var bmp4 = new GcBitmap();
bmp4.Load("test4.jpg");
// GcBitmapGraphicsを作成
var g = bmp4.CreateGraphics();
var tf = new TextFormat()
{
FontName = "Yu Gothic",
FontSize = 48,
FontBold = true,
ForeColor = Color.White
};
// テキストを描画
g.DrawString("夏はやっぱりスイカ!", tf, new PointF(500, 300));
// 保存
bmp4.SaveAsJpeg("drawtext.jpg");Loadメソッドで画像ファイルを読み込むCreateGraphicsメソッドでGcBitmapGraphicsを作成TextFormatでフォントを設定DrawStringメソッドでテキストを描画SaveAsXXXXメソッドで画像ファイルを保存する
といった手順で画像にテキストを描画することができます。テキストの書式や段落、改行などを設定したい場合は、DrawTextLayoutメソッドで描画することも可能です。

画像を読み込み、他の画像と合成
GcBitmapクラスのCompositeAndBlendメソッドを使用して画像を合成します。
// 画像を読み込み
var dstbmp = new GcBitmap();
dstbmp.Load("sea-side.png");
var srcbmp = new GcBitmap();
srcbmp.Load("kids-watermelon.png");
// 合成して保存
var tmpbmp = dstbmp.Clone();
tmpbmp.CompositeAndBlend(srcbmp, 200, 700, CompositeMode.SourceOver);
tmpbmp.SaveAsPng("source-over.png");Loadメソッドで画像ファイルを読み込むCloneメソッドでGcBitmapを複製CompositeAndBlendメソッドで画像を合成。引数で位置や合成方法を設定SaveAsXXXXメソッドで画像ファイルを保存する
といった手順で画像を合成することができます。

画像を読み込み、他の画像と結合
GcBitmapクラスのBitBltメソッドを使用して画像を結合します。
// 画像を読み込み
var bmp5 = new GcBitmap();
bmp5.Load("strawberry.png");
var bmp6 = new GcBitmap();
bmp6.Load("peach.png");
// アルファチャンネルを無視する
bmp5.Opaque = true;
bmp6.Opaque = true;
// 結合して保存
int w = bmp5.PixelWidth;
int h = bmp5.PixelHeight;
var outBmp = new GcBitmap(w * 2, h, true);
outBmp.BitBlt(bmp5, 0, 0);
outBmp.BitBlt(bmp6, w, 0);
outBmp.SaveAsPng("combined.png");Loadメソッドで画像ファイルを読み込む- 合成した画像用の
GcBitmapを作成 BitBltメソッドで画像を結合。引数で位置を設定SaveAsXXXXメソッドで画像ファイルを保存する

今回紹介したDioDocs for Imagingの画像処理を実装しているサンプルはこちらです。
デモで動作を体験
Webサイトでは、DioDocs for Imagingの機能を気軽に試せるデモアプリケーションを用意しています。以下の内容をすぐに確認できます。
- C#およびVB.NETのサンプルコード
- 実行結果として生成された画像
- 機能別の具体的な処理例
さいごに
弊社Webサイトではトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。
