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 自体を変換する方法はありますか?
何をすべきか、もう手がかりがありません。