投稿者 tel | 2010年8月11日

画像処理プログラミング

ひさしぶりに画像処理のプログラムを書きたくなったのでちょこちょこ書いていこう。見てくれる人がいることを願ってちゃんと説明を書いていくことにする。コンピュータで画像を扱う基本的な知識はある前提で。

まずは基本的な画像クラスを作るところから。汎用的に作ろうとするとなかなか難しいので24bitのRGB形式の画像クラスを作る。以下コード。

struct RGB {
 unsigned char r, g, b;
};

template <typename T>
class Image {
private:
  Image(const Image &);
  Image &operator=(const Image &);
public:
  T **lines;
  int width;
  int height;
  Image() : lines(NULL), width(0), height(0) {}
  virtual ~Image() { Release(); }
  void Create(int w, int h) {
    if(w != width || h != height)
      Release();
    lines = new T *[h];
    lines[0] = new T [w * h];
    for(int i = 1; i < h; i++) {
      lines[i] = &lines[0][w * i];
    }
    width = w;
    height = h;
  }
  void Release() {
    if(lines) {
      delete [] lines[0];
      delete [] lines;
    }
    width = height = 0;
  }
};
typedef Image<RGB> Image24;

コピーコンストラクタと代入演算子をprivateにしてるのは気分。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。