2017年7月5日水曜日

C# Magick.NETを使ってみる。画像回転

C# Magick.NETを使ってみる
目次→http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw11

「Magick.NET」での回転では、
回転時の黒100%のエッジのボケ具合等を見ると、
「Photoshop」の回転よりも結果が良いと感じた。

「通常の回転」と「アフィン変換」での回転で少し結果が異なるが、
大きな違いはあまり感じられなかった。


通常の回転


通常の回転は処理も速めな感じ。
            using (var myMagick = new ImageMagick.MagickImage("./色チャート/色600_CMYK_グレー化.psd"))
            {
                //プロファイルの削除
                myMagick.RemoveProfile("icc");

                myMagick.Rotate(30);
                //画像の位置をリセット
                myMagick.RePage();

                myMagick.Write("./test_outfile2.tif");
            }
回転を掛けた場合、
「画像の位置をリセット」を行わないと、tiffで保存出来ないみたい。
(bmp等は問題なく保存できる。)



アフィン変換による回転


アフィン変換での回転は通常に比べて少し処理が重い。
(使えなくはないレベル)
        /// <summary>
        ///アフィン変換による回転
        /// </summary>
        /// <param name="myMagick">Magick画像のインスタンス</param>
        /// <param name="angle">回転角度</param>
        private void affinRotate(ImageMagick.MagickImage myMagick, double angle)
        {
            //以下のサイトを参考
            //http://www.imagemagick.org/Usage/distorts/affine/

            double radians = angle * Math.Atan2(1.0, 1.0) / 45;
            double sx = Math.Cos(radians);
            double sy = sx;
            double rx = Math.Sin(radians);
            double ry = -(rx);

            myMagick.AffineTransform(new ImageMagick.DrawableAffine(sx, sy, rx, ry, 0.0, 0.0));

            //画像の位置をリセット
            myMagick.RePage();

        }


Exif情報内のorientation情報について


アプリケーションによっては、
Exif情報の中のorientation情報に従って、
画像が勝手に回転してしまう場合があります。

Exif情報そのものを削除するか、
Exif情報内のorientation情報を更新するか、
Exif情報内のorientation情報に従って画像を回転させるか、
等の方法で対処します。

Exif情報そのものを削除する場合
                //Exif情報の削除
                myMagick.Strip();

回転(orientation)情報を無しに更新する(Exif情報は消さない)
                myMagick.Orientation = ImageMagick.OrientationType.Undefined;

回転(orientation)情報を左上に更新する(Exif情報は消さない)
                myMagick.Orientation = ImageMagick.OrientationType.TopLeft;

Exif情報内のorientation情報に従って画像を回転
                //Exif内orientation情報に従って画像回転
                myMagick.AutoOrient();






3Dの回転だと、
「アフィン変換」、「オイラー角変換」、「クォータニオン変換」があり、
「クォータニオン変換」が一般的らしいが、よく調べていないので分からない。
(「オイラー角変換」は正しい回転にならない事があるみたい。)


c#で画像回転
http://dobon.net/vb/dotnet/graphics/skewing.html

「ImageMagick で画像を自由自在に操りたい」
(IMでの画像回転について比較的詳しく書いてある)
http://www.taskinteractive.com/tecnical/imagemagick/

0 件のコメント:

コメントを投稿

↑Topへ