(我正在开发一个针对iOS的Xamarin.Forms项目,但我觉得我需要使用monotouch来实现我的目标。)
我有一个从函数中得到的数组,这个数组代表了一些我希望保存并稍后显示的位图数据。我一直在看文档,我没有看到从字节到位图到文件的路径,这和我期望的一样清晰。在WinForms中,我创建了一个System.Drawing.Bitmap
,然后使用Save()
方法。在Xamarin for Android中,Android.Graphics.Bitmap
有Compress()
方法,可让我输出到流。我无法弄清楚Xamarin iOS中的等价物是什么。
像素数据是每像素32位,每个组件8位,ARGB。我已经知道我可以从中创建一个CGImage
,目前通过CGBitmapContext
。我可以从中获得UIImage
,但下一个明确的方法是UIImage.SaveToPhotoStream()
,这不是我想要做的。我看到AsPng()
返回NSData
,这似乎是一种方法。我还没有完成它的工作(因为某些原因提供者决定输出int []而不是byte [])但我很好奇:是否有更简单的方法从原始像素数据转到PNG文件?
答案 0 :(得分:3)
您可以使用ImageIO来更好地控制序列化的内容。
你仍然需要让自己成为一个可以使用的CGImage。
使用三个CGImageDestination.Create重载之一来选择要生成的输出类型(保存到NSMutableData对象,NSUrl或您自己的数据提供程序),添加图像,然后关闭CGImageDestination
这样的事情:
var storage = new NSMutableData ()
var dest = CGImageDestination.Create (storage, MobileCoreServices.UTType.PNG, imageCount: 1);
dest.AddImage (yourImage);
dest.Close (); // This saves the data
如果要创建具有多个帧的图像,可以将Create for imageCount中的参数更改为其他数字,在这种情况下,您还将重复调用AddImage。
答案 1 :(得分:0)
如果您希望将图像写入文件,那么它将非常简单:
var bytes = image.AsPNG().ToArray();
await stream.WriteAsync(bytes, 0, bytes.Length);