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