2

ユーザーがアセット ライブラリから複数の画像を選択できるアプリがあります。私が抱えている問題は、アセット ライブラリからアプリのライブラリのディレクトリに画像を「コピー」するときに、向きのメタデータが保存されないことです。その結果、画像が上下逆さまになることがあります...

以下は単体テストのコードです。簡単にデバッグできるように、コードを簡略化して別の行に移動しました。

これは機能しますが、メタデータをコピーしません:

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 に渡す簡単な方法はありますか?

4

1 に答える 1

0

次のことを試してみませんか。オリエンテーションの問題などに直面したことはありません。

UIImageOrientation orientation = UIImageOrientation.Up;
ALAssetRepresentation assetRep = asset.DefaultRepresentation;
CGImage imgRef = assetRep.GetFullScreenImage ();
orientation = (UIImageOrientation)assetRep.Orientation;
UIImage Image = new UIImage(imgRef,1.0f,orientation);

using (NSData imageData = img.AsJPEG()) 
{
     Byte[] myByteArray = new Byte[imageData.Length];
     System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, myByteArray, 0, Convert.ToInt32(imageData.Length));
     string pathToSave = ""; //Assign your path
     if(!File.Exists(pathToSave))
     {
     File.WriteAllBytes (pathToSave, myByteArray);
     }
}

もう1つ、assetRep.GetImage()の代わりにassetRep.GetFullScreenImage()を使用すると、問題が解決すると思います。

それが役に立てば幸い。

于 2014-04-09T06:50:24.753 に答える