先回作成した、C#で作成したモノクロ(2値化)ビットマップを扱うメソッドを、クラスライブラリ化して別のプロジェクトに読み込んで利用する方法を紹介します。
クラスライブラリの作成
先回の「C#でPNG画像をモノクロビットマップ形式に変換する」で2値化されたイメージのピクセルを操作するメソッドを作成しました。今回は、このメソッドをクラスライブラリとして再利用する手順を紹介します。
- [Visual Studio]を起動して、[ファイル|新規作成|プロジェクト]メニューを選択します。
- 表示された[新しいプロジェクト]画面で[クラスライブラリ(.NET Framework)]を選択します。
- 適当な名前を入力して[OK]ボタンをクリックします。
- 新しいプロジェクトが作成され必要なファイルが読み込まれます。
- 既定で作成された[Class1.cs]のファイル名を分かりやすい名前に変更します。(今回は、[IndexImage.cs]に変更しました)
- [ソリューション エクスプローラー]画面の[参照]部分をマウスの右ボタンでクリックして表示されたポップアップメニューから[参照の追加]メニューを選択します。
- 表示された[参照マネージャー]画面で、[System.Drawing]を検索して左側のチェックボックスを有効(チェックを付ける)にして[OK]ボタンをクリックします。
- [参照]部分に[System.Drawing]が追加されたら、[IndexImage.cs]にコードを追加します。
- [プロジェクト|MyImageのプロパティ]メニューを選択します。
- 表示された[プロジェクトのプロパティ]画面の[ビルド]画面で[アンセーフ コードの許可]を有効(チェックを付ける)にします。
- [ビルド|ソリューションのビルド]メニューを選択します。
- エラーが表示されなければ操作は完了です。
[IndexImage.cs]に追加するコードは、こんな感じになります。
using System.Drawing; namespace MyImage
{
public class IndexImage
{
unsafe public void SetPixel1bpp(Bitmap bmp, int x, int y, bool white)
{
System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format1bppIndexed);
byte* p = (byte*)bmpData.Scan0;
int index = y * bmpData.Stride + (x << 3);
byte mask = (byte)(0x80 << (x & 0x7));
if(white)
{
p[index] |= mask;
}
else
{
p[index] &= (byte)(mask ^ 0xff);
}
bmp.UnlockBits(bmpData);
}
}
}
クラスライブラリの呼び出し
作成したクラスライブラリ内の[SetPixel1pbb]メソッドを呼び出す手順です。
- 新しいプロジェクト(C#のプロジェクトであれば何でも良い)を作成します。
- [ソリューション エクスプローラー]内の[参照]部分をマウスの右ボタンでクリックして表示されたポップアップメニューから[参照の追加]メニューを選択します。
- 表示された[参照マネージャー]画面で、[参照]ボタンをクリックして、表示された画面で先に作成した[MyImage]プロジェクトの場所を開き、[MyImage.dll]ファイルを開きます。
- [参照マネージャー]画面の[参照]に[MyImage.dll]が追加されます。
- [OK]ボタンをクリックして画面を閉じます。
- 次のような呼び出し用のコードを追加します。
MyImage.IndexImage myimage = new MyImage.IndexImage(); myimage.SetPixel1pbb(bmp, x, y, true);
まとめ
外部ライブラリ化することで、メソッドを再利用することができるようになるので開発作業の効率化を図ることができます。
アプリケーション内部に作り付けで追加していた部分を、他プログラムからでも呼び出せるようにしたことで、プログラム開発の生産性を上げることができます。
次回は、C++などの別言語で作成したプログラムからの呼び出しなど応用的な使い方を紹介していきます。
スポンサーリンク
最後までご覧いただき、ありがとうございます。