目次→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 件のコメント:
コメントを投稿