ユーザーがアセット ライブラリから複数の画像を選択できるアプリがあります。私が抱えている問題は、アセット ライブラリからアプリのライブラリのディレクトリに画像を「コピー」するときに、向きのメタデータが保存されないことです。その結果、画像が上下逆さまになることがあります...
以下は単体テストのコードです。簡単にデバッグできるように、コードを簡略化して別の行に移動しました。
これは機能しますが、メタデータをコピーしません:
private void getAssetFromURL(ALAsset asset)
{
NSError fileError;
ALAssetRepresentation rep = asset.DefaultRepresentation;
CGImage cgi = rep.GetImage();
UIImage img = UIImage.FromImage(cgi);
NSData jpegData = img.AsJPEG();
jpegData.Save(pathToSave,true,out fileError);
}
向きを含めるようにコードを変更すると、オブジェクト参照エラーが発生します。jpegData は null であり、デバッグで UIImage の CGImage データを見ると、null であることがわかります。ただし、方向が UIImage に適切に渡されることに気付きました。
private void getAssetFromURL(ALAsset asset)
{
NSError fileError;
ALAssetRepresentation rep = asset.DefaultRepresentation;
UIImageOrientation orientation = UIImageOrientation.Up;
if (rep.Orientation != null && rep.Orientation != ALAssetOrientation.Up)
orientation = (UIImageOrientation)rep.Orientation;
CGImage cgi = rep.GetImage();
UIImage img = UIImage.FromImage(cgi,rep.Scale,orientation);
NSData jpegData = img.AsJPEG(); //data is null
jpegData.Save(pathToSave,true,out fileError); //throws object reference error
}
私は何を間違っていますか?画像を回転させずに向きを JPEG に渡す簡単な方法はありますか?