2017年7月5日水曜日

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

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

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

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


通常の回転


通常の回転は処理も速めな感じ。
通常の回転
1
2
3
4
5
6
7
8
9
10
11
using (var myMagick = new ImageMagick.MagickImage("./色チャート/色600_CMYK_グレー化.psd"))
{
    //プロファイルの削除
    myMagick.RemoveProfile("icc");
 
    myMagick.Rotate(30);
    //画像の位置をリセット
    myMagick.RePage();
 
    myMagick.Write("./test_outfile2.tif");
}
回転を掛けた場合、
「画像の位置をリセット」を行わないと、tiffで保存出来ないみたい。
(bmp等は問題なく保存できる。)



アフィン変換による回転


アフィン変換での回転は通常に比べて少し処理が重い。
(使えなくはないレベル)
アフィン変換による回転
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <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情報の削除
1
2
//Exif情報の削除
myMagick.Strip();

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

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

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






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


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

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

0 件のコメント:

コメントを投稿

↑Topへ