簡単に言うと、画像をBitmapに読み込み、PictureBoxのImageプロパティに設定するだけです。
しかし、その画像をなんらか加工するためには、自力で処理する必要があります。たとえは画像をグレースケール化するためには、RGBの値の平均値をRGBそれぞれにセットするという式処理することができます。
コードの例は、こんな感じ。
Bitmap bmp = new Bitmap(ctlPicture.Image);
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
// 計算式にて、値を算出してセットする
//int col = (int)((color.R + color.G + color.B) / 3);
int col = (int)Math.Round((double)(color.R + color.G + color.B) / 3);
bmp.SetPixel(i, j, Color.FromArgb(col, col, col));
}
}
ctlPicture.Image = bmp;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
// 計算式にて、値を算出してセットする
//int col = (int)((color.R + color.G + color.B) / 3);
int col = (int)Math.Round((double)(color.R + color.G + color.B) / 3);
bmp.SetPixel(i, j, Color.FromArgb(col, col, col));
}
}
ctlPicture.Image = bmp;
しかしGetPixelとSetPixelを使ったやり方は、パフォーマンスが出ません。
ちなみに、
- CPU:C2D 2.0GHz
- メモリ:2GB
- 対象の画像:645×425 24bitカラー
という環境で動作させると、この方法では約700ms程度の時間がかかります(リリースコンパイルで実行)。
次回、これを高速化する方法を紹介します。
0 件のコメント:
コメントを投稿