見出し画像

解説クラスCopyClear(3)

解説クラスCopyClear(3)


2024年2月26初講(初稿)

この解説文章は、
解説『解説クラスCopyClear(2)』の続きです!

(4-7)画像の幾何変換

    int             MagnifyImage(                   // 画像の拡大・縮小
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      zh,                             // 水平拡大率
        double      zv,                             // 垂直拡大率
        int         dataSize=1,                     // 画素サイズ
        int         sw=FALSE );                     // 補間SW(真:補間)

    int             MoveImage(                      // 画像の平行移動
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      x,                              // X座標
        double      y,                              // Y座標
        int         dataSize=1,                     // 画素サイズ
        int         sw=FALSE );                     // 補間SW(真:補間)

    int             MirrorImage(                    // 画像の鏡像
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         k,                              // 1:左右反転
                                                    // 2:上下反転
                                                    // 3:上下左右反転
        int         dataSize=1 );                   // 画素サイズ(省略時=1)

    int             MirrorImage(                    // 画像の鏡像:自分自身
        TypeArray*  image,                          // 画像
        int         k,                              // 1:左右反転
                                                    // 2:上下反転
                                                    // 3:上下左右反転
        int         dataSize=1 );                   // 画素サイズ(省略時=1)

    int             RotateImage(                    // 画像の回転
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      a,                              // 回転角:ラジアン
        double      x1,                             // S配列回転中心x
        double      y1,                             // S配列回転中心y
        double      x2,                             // D配列回転中心x
        double      y2,                             // D配列回転中心y
        int         dataSize=1,                     // 画素サイズ(省略時=1)
        int         sw=FALSE );                     // 補間SW(真:補間)
    int             RotateImageInterpolate(         // 画像の回転:補間版
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      a,                              // 回転角:ラジアン
        double      x1,                             // S配列回転中心x
        double      y1,                             // S配列回転中心y
        double      x2,                             // D配列回転中心x
        double      y2,                             // D配列回転中心y
        int         dataSize=1 );                   // 画素サイズ(省略時=1)
    int             RotateImageReal(                // 画像の回転:補間版
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      a,                              // 回転角:ラジアン
        double      x1,                             // S配列回転中心x
        double      y1,                             // S配列回転中心y
        double      x2,                             // D配列回転中心x
        double      y2,                             // D配列回転中心y
        int         dataSize=1 );                   // 画素サイズ(省略時=1)

この章では、(拡大・縮小)関数群、(平行移動)関数群、
(鏡像)関数群、(回転)関数群、関数群を紹介します!

(4-7-1)関数「int MagnifyImage(
TypeArray* ps,TypeArray* pd,
double zh,double zv,int dataSize=1,int sw=FALSE);」

    int             MagnifyImage(                   // 画像の拡大・縮小
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      zh,                             // 水平拡大率
        double      zv,                             // 垂直拡大率
        int         dataSize=1,                     // 画素サイズ
        int         sw=FALSE );                     // 補間SW(真:補間)

「Magnify」は、英単語「magnify」で「拡大」を意味
します!
「Image」は、画像ですので画像の拡大ですが拡大の意味を
拡大解釈して画像の拡大・縮小を行う関数です!
仮引数「TypeArray* ps,」は、元画像(S)
仮引数「TypeArray* pd,」は、結果画像(D)
仮引数「double zh,」は、水平方向(X軸方向)の
拡大(縮尺)率と倍精度浮動小数点数で指定!
仮引数「double zv,」は、垂直方向(Y軸方向)の
拡大(縮尺)率と倍精度浮動小数点数で指定!
★注意★「zh,zv」の「z」は、英語「Camerazoom」の略
として「z」で表現元々は、オノマトペ(多分「ズー音」と
カメラメカの動作音)らしい?!その為に
関数名「magnify」と意味が有る物を使用し引数に「z」を
使用しました!
仮引数「int dataSize=1,」は、通常省略時(dataSize=1)
で1画素単位処理ですが、BMP構造も処理出来る様にした
事でBMPならば、(dataSize=3)としてカラー画像を処理
します!
仮引数「int sw=FALSE);」は、補間SW(真:補間、
省略時=偽と非補間)★注意★補間は拡大時にモザイク状態
に成るのは非補間でグラデーションが付くのが補間処理を掛
けた結果です★備考★勿論、グラデーションが付いた方が、
処理が遅く成りますので必要な場合以外は無駄な処理??
★詳細★は、
後で説明:【ファイル「CopyClear.cpp」及びファイル
「CopyClear300.cpp」が対象】します!

(4-7-2)関数「int MoveImage(
TypeArray* ps,TypeArray* pd,
double x,double y,int dataSize=1,int sw=FALSE);」

    int             MoveImage(                      // 画像の平行移動
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      x,                              // X座標
        double      y,                              // Y座標
        int         dataSize=1,                     // 画素サイズ
        int         sw=FALSE );                     // 補間SW(真:補間)

「Move」は、ムーブ動かすを意味
「Image」は、画像で画像を平行移動させる幾何変換です!
仮引数「TypeArray* ps,」は、元画像(S)
仮引数「TypeArray* pd,」は、結果画像(D)
仮引数「double x,」は、水平方向(X軸方向)移動座標を
倍精度浮動小数点数で指定!
仮引数「double y,」は、垂直方向(Y軸方向)移動座標を
倍精度浮動小数点数で指定!
仮引数「int dataSize=1,」は、通常省略時(dataSize=1)
で1画素単位処理ですが、BMP構造も処理出来る様にした
事でBMPならば、(dataSize=3)としてカラー画像を処理
します!
仮引数「int sw=FALSE);」は、補間SW(真:補間、
省略時=偽と非補間)★注意★補間は移動時に移動割合で
画素の値を調整します!★備考★勿論、調整が付いた方が、
処理が遅く成りますので必要な場合以外は無駄な処理??
★注意★コピペとの違いは、移動量が整数値で無く画素の
途中でも細かく指定出来る事です!
★詳細★は、後で説明:【ファイル「CopyClear350.cpp」が
対象】します!

(4-7-3)関数「int MirrorImage(
TypeArray* ps,TypeArray* pd,int k,int dataSize=1);

    int             MirrorImage(                    // 画像の鏡像
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        int         k,                              // 1:左右反転
                                                    // 2:上下反転
                                                    // 3:上下左右反転
        int         dataSize=1 );                   // 画素サイズ(省略時=1)

「Mirror」は、ミラー鏡を意味!
「Image」は、画像で画像の鏡像を作成する幾何変換です!
仮引数「TypeArray* ps,」は、元画像(S)
仮引数「TypeArray* pd,」は、結果画像(D)
仮引数「int k,」は、鏡像の種類≪左右反転・上下反転・
上下左右反転≫を示します!
仮引数「int dataSize=1,」は、通常省略時(dataSize=1)
で1画素単位処理ですが、BMP構造も処理出来る様にした
事でBMPならば、(dataSize=3)としてカラー画像を
処理します!
★詳細★は、後で説明:
【ファイル「CopyClear310.cpp」が対象】します!

(4-7-4)関数「int MirrorImage(
TypeArray* image,int k,int dataSize=1);

    int             MirrorImage(                    // 画像の鏡像:自分自身
        TypeArray*  image,                          // 画像
        int         k,                              // 1:左右反転
                                                    // 2:上下反転
                                                    // 3:上下左右反転
        int         dataSize=1 );                   // 画素サイズ(省略時=1)

「Mirror」は、ミラー鏡を意味!
「Image」は、画像で画像の鏡像を作成する幾何変換です!
仮引数「TypeArray* image,」は、画像を示し、
画像の一項演算子的に自分自身の鏡像を作成します!
★注意★勿論、多重定義(オーバーロード)関数です!
仮引数「int k,」は、鏡像の種類≪左右反転・上下反転・
上下左右反転≫を示します!
仮引数「int dataSize=1,」は、通常省略時(dataSize=1)
で1画素単位処理ですが、BMP構造も処理出来る様にした
事でBMPならば、(dataSize=3)としてカラー画像を処理
します!
★詳細★は、後で説明:
【ファイル「CopyClear310.cpp」が対象】します!

(4-7-5)関数を「int RotateImage(
TypeArray* ps,TypeArray* pd,
double a,double x1,double y1,
double x2,double y2,
int dataSize=1,int sw=FALSE);」

    int             RotateImage(                    // 画像の回転
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      a,                              // 回転角:ラジアン
        double      x1,                             // S配列回転中心x
        double      y1,                             // S配列回転中心y
        double      x2,                             // D配列回転中心x
        double      y2,                             // D配列回転中心y
        int         dataSize=1,                     // 画素サイズ(省略時=1)
        int         sw=FALSE );                     // 補間SW(真:補間)
    int             RotateImageInterpolate(         // 画像の回転:補間版

「Rotate」は、英単語「Rotate」回転するで
「Image」は、画像で画像の回転結果画像を作成します!
★注意★ここで回転は、「ローテーション」平面上の一点を
中心に回転する方式です!
仮引数「TypeArray* ps,」は、元画像(S)
仮引数「TypeArray* pd,」は、結果画像(D)
仮引数「double a,」は、回転角度です!
仮引数「double x1,」は、元画像用の回転中心X座標です!
仮引数「double y1,」は、元画像用の回転中心Y座標です!
仮引数「double x2,」は結果画像用の回転中心X座標です!
仮引数「double y2,」は結果画像用の回転中心Y座標です!
仮引数「int dataSize=1,」は、通常省略時(dataSize=1)
で1画素単位処理ですが、BMP構造も処理出来る様にした
事でBMPならば、(dataSize=3)としてカラー画像を処理
します!
仮引数「int sw=FALSE);」は、補間SW(真:補間、
省略時=偽と非補間)★注意★補間は回転時に元画像画素が
補正無しに成るのが非補間でグラデーションが付くのが補間
処理を掛けた結果です★備考★勿論、グラデーションが付い
た方が、処理が遅く成りますので必要な場合以外は無駄な
処理??

★詳細★は、後で説明:【ファイル「CopyClear310.cpp」及
びファイル「CopyClear330.cpp」及びファイル
「CopyClear340.cpp」が対象】します!

(4-7-6)関数を「int RotateImageInt erpolate(
TypeArray* ps,TypeArray* pd,
double a,double x1,double y1,
double x2,double y2,int dataSize=1);」

    int             RotateImageInterpolate(         // 画像の回転:補間版
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      a,                              // 回転角:ラジアン
        double      x1,                             // S配列回転中心x
        double      y1,                             // S配列回転中心y
        double      x2,                             // D配列回転中心x
        double      y2,                             // D配列回転中心y
        int         dataSize=1 );                   // 画素サイズ(省略時=1)

「Rotate」は、英単語「Rotate」回転するで
「Image」は、画像で画像の回転結果画像を作成します!
「Interpolate」は、英単語「Interpolate」補間する
です!
★注意★ここで回転は、「ローテーション」平面上の一点を
中心に回転する方式です!そして補間する場合の処理です!
仮引数「TypeArray* ps,」は、元画像(S)
仮引数「TypeArray* pd,」は、結果画像(D)
仮引数「double a,」は、回転角度です!
仮引数「double x1,」は、元画像用の回転中心X座標です!
仮引数「double y1,」は、元画像用の回転中心Y座標です!
仮引数「double x2,」は結果画像用の回転中心X座標です!
仮引数「double y2,」は結果画像用の回転中心Y座標です!
仮引数「int dataSize=1,」は、通常省略時(dataSize=1)
で1画素単位処理ですが、BMP構造も処理出来る様にした
事でBMPならば、(dataSize=3)としてカラー画像を処理
します!

★詳細★は、後で説明:【ファイル「CopyClear310.cpp」及
びファイル「CopyClear330.cpp」及びファイル
「CopyClear340.cpp」が対象】します!

(4-7-7)関数を「int RotateImageReal(
TypeArray* ps,TypeArray* pd,
double a,double x1,double y1,
double x2,double y2,int dataSize=1);」

    int             RotateImageReal(                // 画像の回転:補間版
        TypeArray*  ps,                             // S配列
        TypeArray*  pd,                             // D配列
        double      a,                              // 回転角:ラジアン
        double      x1,                             // S配列回転中心x
        double      y1,                             // S配列回転中心y
        double      x2,                             // D配列回転中心x
        double      y2,                             // D配列回転中心y
        int         dataSize=1 );                   // 画素サイズ(省略時=1)

「Rotate」は、英単語「Rotate」回転するで
「Image」は、画像で画像の回転結果画像を作成します!
「int erpolate」は、英単語「int erpolate」補間する
です!
★注意★ここで回転は、「ローテーション」平面上の一点を
中心に回転する方式です!そして補間する場合の処理です!
仮引数「TypeArray* ps,」は、元画像(S)
仮引数「TypeArray* pd,」は、結果画像(D)
仮引数「double a,」は、回転角度です!
仮引数「double x1,」は、元画像用の回転中心X座標です!
仮引数「double y1,」は、元画像用の回転中心Y座標です!
仮引数「double x2,」は結果画像用の回転中心X座標です!
仮引数「double y2,」は結果画像用の回転中心Y座標です!
仮引数「int dataSize=1,」は、通常省略時(dataSize=1)
で1画素単位処理ですが、BMP構造も処理出来る様にした
事でBMPならば、(dataSize=3)としてカラー画像を処理
します!

★詳細★は、後で説明:
【ファイル「CopyClear340.cpp」が対象】します!
★注意★関数「RotateImageInterpolate()」との違いは、
詳細で説明します!

★★備考★★
次から、このヘッダーファイル「CopyClear.h」が、
関数「int Sort();」の定義とガラット様子が変わるので
この解説文章は、一旦、ここで終了し、
ここで「解説クラスCopyClear(3)」を
終わります!
講義として切れ目が良いと判断したからです!
続きは、「解説クラスCopyClear(4)」に
成ります引き続き御贔屓して受講して下さい!

★備考★
解説『解説クラスTypeArray』でも記載したが、
noteエディタの変な特性でコピペした文章の半角「*」
が消されたり、空白「」が消される事が多々あります!
注意して手作業で修正している筈ですが、必ず、code
機能で表示して居る物を正しいとして確認して下さい

文末

この記事が気に入ったらサポートをしてみませんか?