1

memoryStream から取得した画像を回転させたい。

私はUIViewを使用しようとしました:

private Stream TransformImageFromStream(MemoryStream stream, CGAffineTransform transform)
    {
        var bytes = stream.ToBytes ();
        var data = NSData.FromArray (bytes);
        var image = UIImage.LoadFromData (data);
        var uiImage = new UIImageView (image);
        uiImage.Transform = transform;
        var result = uiImage.Image.AsPNG ().AsStream ();

        var testBytes = result.ToBytes ();
        if (testBytes [0] == bytes [0]) 
        {
        //  throw new Exception ("test failed");
        }

        return result;

    }

ただし、グラフィック キャンバス内の UIView では常に適用されるため、変換は適用されません。

ApplyTransform を CIImage に直接使用して動作する場所を見つけました

private Stream TransformImageFromStream(MemoryStream stream, CGAffineTransform transform)
    {
        var bytes = stream.ToBytes ();
        using (var data = NSData.FromArray (bytes))
        using (var ciImage = CIImage.FromData (data))
        using (var transformedImage = ciImage.ImageByApplyingTransform (transform))
        using (var uiImage = UIImage.FromImage(ciImage))
        using (var uiImageView = new UIImageView(uiImage))
        {
            var result = uiImage.AsPNG ();
            return null;
        }
    }

しかし、UIImage はストリームに変換するために AsPng() に変換したくありません。この場合、CGImage が空で、ほとんどのプロパティが 0 に設定されていることに気付きました。おそらく、ラップせずに CIImage 自体を変換する方法はありますか?

何をすべきか、もう手がかりがありません。

4

0 に答える 0