4

私は MonoTouch を使用しており、UIImage(a に表示され、UIImageView見栄えが良い) があり、それを に変換しようとしていますが、NSDataが返されます。何が問題になる可能性がありますか?AsJPEGAsPNGnull

私のコードは次のようになります。

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

画像サイズが大きすぎるため、AsJPEG は null を返しました (iPhone 5 で撮影されました)。2倍にスケールダウンした後、データを適切に生成します。

于 2013-03-01T10:31:28.513 に答える
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 に答える