我想旋转从 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 本身,而不需要任何包装?
我没有更多的线索来做什么。