さて、前回は色々と準備に
手間取っていたが
いよいよ回転させる
プログラムに取り組む。
まずは、クラスから
// 単純な構成になっているので、何をするかは名前から大体分かる。
class YuvImageRotate
{
public:
YuvImageRotate(); // コンストラクタ
~YuvImageRotate(); // デストラクタ
// オリジナル画像データと回転方向の設定する
void SetYuvRawData(int orient, unsigned char *src_data, int width, int height);
// 回転後の画像データを取得する
unsigned char *GetRotatedYuvRawData(int *raw_size, int *raw_width, int *raw_height);
private:
int m_Angle;
bool m_bHorizon;
int m_Size;
int m_Width;
int m_Height;
unsigned char *m_pRotated;
int m_SrcWidth;
int m_SrcHeight;
unsigned char *m_pSrc;
void getRotateInfo(int); // 内部処理で使用する回転情報を取得する関数
void invokeReverse(); // 反転を実行する関数
void invokeRotate(); // 回転を実行する関数
};
使い方としては、プログラム実行時に、あるyuv画像をこの角度回転させると
正しい向きになるという情報をパラメータとして与えることにしている。
例えば、Orientation 6 時計回りに90度を指定したとすると、
左の元画像に対し、出力結果は右画像のようになる。
なお、簡単なサンプルなので、デスクトップにあるyuv画像を回転後のyuv画像として、
デスクトップにファイルを出力するという形式になっている。
次にコンストラクタと一応書いただけのデストラクタがこちら。
// やることはメンバ変数の初期化だけ
YuvImageRotate::YuvImageRotate() :
m_Angle(0),
m_bHorizon(false),
m_Size(0),
m_Width(0),
m_Height(0),
m_pRotated(NULL),
m_SrcWidth(0),
m_SrcHeight(0),
m_pSrc(NULL)
{
}
// nothing to do
YuvImageRotate::~YuvImageRotate()
{
}
その他メンバ関数は、全体を通すと意外と長くなってくるので、次回に続く。
今日の名言
今日は新しい日です。この日に注ぎ込んだものは、何でも取り出すことができます。
たとえ失敗を、それも大失敗をやったとしても、またやり直す機会が常にあります。
そして、何度も何度も試みては失敗したとしても、いつでも好きな時に出発し直せる
のです。なぜなら、いわゆる「失敗」とは、倒れることでなく、ちょっと留まるだけのこと
だからです。
メアリー・ピックフォード
幸福は人の地位とか財産には関係がない。全く自分の考え方一つで、人は幸福にも
不幸にもなる。だから毎朝自分にとってありがたいもののことを考えて、一日を
はじめることだ。人の未来は自分が今日考えていることに非常に大きく左右される。
だから希望と自信、愛と成功のことばかり考えるのだ。
デール・カーネギー
いつも楽しく暮らすよう心がければ、外的環境から完全に、あるいはほとんど
解放される。
ロバート・ルイス・スティーヴンソン