4

我正在使用 MonoTouch,我有一个UIImage(显示在 a 中UIImageView,看起来不错),我正在尝试将其转换为NSData, 但AsJPEGAsPNG返回null。可能是什么问题?

我的代码如下所示:

NSError err;
NSData imageData = CroppedImageView.Image.AsJPEG(); // imageData is null!

if (!imageData.Save ("tmp.png", true, out err)) {
  Console.WriteLine("Saving of file failed: " + err.Description);
}
4

3 回答 3

3

AsJPEG方法调用UIImageJPEGRepresentation及其返回值记录为:

包含 JPEG 数据的数据对象,如果生成数据时出现问题,则返回 nil。如果图像没有数据或底层 CGImageRef 包含不受支持的位图格式的数据,此函数可能会返回 nil。

这类似于iOS(和OSX)中的许多API,其中异常不常用(并且null用于报告某种错误)。

无论如何,您应该检查您的图像尺寸和属性——它们可能会给您一些不会转换为 JPEG 位图的提示。

此外,由于NSData可以代表非常大量的内存,您应该尝试限制它的寿命,例如:

using (NSData imageData = CroppedImageView.Image.AsJPEG ()) {
   NSError err;
   if (!imageData.Save ("tmp.jpg", true, out err)) {
      Console.WriteLine("Saving of file failed: " + err.Description);
   }
}
于 2013-02-28T00:46:50.797 回答
1

看起来您正在写入应用程序当前目录中的文件,这是只读的。

你应该使用:

var path = System.IO.Path.GetTempFilename();

或者

var path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "tmp.png");

就像您在其他平台上所做的那样,并从那里使用文件。

您也可以使用Environment.SpecialFolder.MyDocuments.

于 2013-02-27T22:58:21.860 回答
1

AsJPEG 返回 null 因为图像尺寸太大(它是用 iPhone 5 拍摄的)。在我将其缩小 2 后,它会正确生成数据。

于 2013-03-01T10:31:28.513 回答