0

私はしばらくの間monoを使用してきましたが、私が遭遇した問題の1つは、画像をCGImageオブジェクトにロードすると、画像が垂直方向に反転してしまうことでした。これは私が最初に使用していたコードでした:

public static CGImage LoadJPEG (string sImagePath, bool bSmoothImage)
{
    return CGImage.FromJPEG (
        new CGDataProvider (sImagePath), null, bSmoothImage,
        CGColorRenderingIntent.Default);
}

代わりにCGImage.FromPNGを使用するだけのPNGバージョンがありますが、間違った形式と間違ったファイルタイプを使用すると、例外が発生します。私は自分のファイルタイプが何であるかを常に知っているので、その例外を防ぐためにキャッチ/チェックを入れませんでした。

このコードを使用するだけで画像が垂直方向に反転することに気付くでしょう。monoがこれを行う理由を説明できず、修正するのを楽しみにしていなかった解決策のいくつかを見てみましょう。

では、どのように元に戻すのですか?幸いなことに、私は自分でそれに答えることができますが、それが「正しい」方法であることを保証することはできません。

4

1 に答える 1

0

これは、画像を上下逆にロードするための簡単な修正であることに注意してください。コードは、仕事をこなしながら得ることができるのと同じくらい単純だと思います。

public static CGImage RotateImage (CGImage oImage)
{
    CGContext oContext;
    UIImage oRotatedImage;
    RectangleF oImageBounds;
    //
    oImageBounds = new RectangleF (0, 0, oImage.Width, oImage.Height);
    //
    UIGraphics.BeginImageContext (oImageBounds.Size);
    oContext = UIGraphics.GetCurrentContext ();
    //
    oContext.DrawImage (oImageBounds, oImage);
    oRotatedImage = UIGraphics.GetImageFromCurrentImageContext ();
    UIGraphics.EndImageContext ();
    //
    return oRotatedImage.CGImage;
}

この質問のコードをいじっているときにこの解決策に出くわしました。うまくいきました。他に何もする必要はありません:Dだから、これがお役に立てば幸いです。

また、このすべての理由を誰かが説明できるなら、私は実際に何が起こっているのか知りたいと思います。2Dグラフィックスを使用した私の以前の唯一の経験は、XNAフレームワークを使用したことです。

于 2013-03-12T09:53:11.167 に答える