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