iPhone写真ライブラリから画像を取得した後に、iPhone文書ディレクトリにUIImageを保存してからロードしようとしています。それは可能ですが、何らかの理由で画像をロードすると、それを反時計回りに90度回転します。ここに私のsaveImageとloadImageメソッドです:iPhone/Xcode:UIImageとUIImageViewはプログラムと一緒に取得しません
画像保存:
- (void)saveImage: (UIImage*)image{
if (image != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithString: @"lePhoto.png"] ];
//NSData* data = UIImagePNGRepresentation(image);
//[data writeToFile:path atomically:YES];
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
}
}
ロードイメージ:
- (NSData*)loadImage{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithString: @"lePhoto.png"] ];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
//UIImage *image = [[UIImage alloc] initWithData:data]; //my second try
//UIImage* image = [UIImage imageWithContentsOfFile:path]; //first try
//return image;
return data;
[data release];
}
そして、私は今、いくつかのために、それは希望かどうかを確認するために、このように画像をロードしています狂った理由、私の問題を解決する(これは明らかに、しませんでした):
UIImage* theImage = [[UIImage alloc] initWithData:[self loadImage]];
私は私が持っているいくつかのテストを行っています2つのUIImageViewsが並んでいます。左側に1つは表示されずに画像を保存してロードします(画像がImagePickerから選択されると画像がまっすぐに表示されます)。セーブロードが発生します。右の方がCCWを90度回転させる唯一のものです。セーブ/ロードしていない画像は正しく表示されています。これは実際のiPhoneでのみ発生します。シミュレータは、両方の画像を正しく表示します。私は多くの、多くの時間それを把握しようとしたが、役に立たない。これを引き起こしている可能性のあるものは何ですか?
編集:明らかにイメージでも、明らかにそうでないときでさえ、それは指向していると言わなければなりません!すべてのコードが実行された後にのみ回転します。私は、コードを変更して、それが変わるかどうかを確認するために、強制的に再描画を試みましたが、そうではありません(それは間違っていても可能です。 また、iPhoneからスクリーンショットされた写真は自動回転しません。カメラで撮影した写真のみ。 [私はダウンロードした写真を試していませんでした]それは一番奇妙なことです...
あなたが私の写真をどのように引っ張っているのか疑問に思っているなら、 (これは明らかに、この機能を行うために必要なすべての方法ではないのですが、それは私が私のコードを書いてどのように洞察力を与える)やって:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
theimageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[self saveImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"]];
[picker dismissModalViewControllerAnimated:YES];
}
何かアドバイスは大歓迎です。そして、私はこれを多く知っています。何かばかげた、決して前に聞いたことのない問題を起こすための狂気をする方法があれば、明らかにそれを見つけるでしょう:P
の代わりに
:あなたは(そう、その行が実行されることはありません)復帰後にそれを解放するので、あなたはここにデータをリークしています。保持コール(alloc、retainまたはnew)を使用してリターンコールを作成する場合は、リターンの前に自動リリースする必要があります。 –
私はそれをリリースしても、私はまだそこからデータを読むことができますか?私はそれを知らなかった。私はそれを変えます。ありがとう! –
autoreleaseは、プールが排水されたときにAutoreleasePoolが-releaseを送信する要求です。あなたは解放したものからデータを読んではいけません。あなたはいつもオートレリースしたものからデータを読みます。 –