4

AVCaptureSession を使用してカメラから画像をキャプチャしています。

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

画像は UIImage に変換され、画像ビューに追加されます。予想どおり、画像は縦向きで表示されます。

キャプチャ セッション間で画像をコア データに保存しようとしています。私のコア データ エンティティには、バイナリ データ型のイメージ プロパティがあります。

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);

ユーザーが以前に保存したセッションをリロードすると、イメージ ビューのイメージが以下を使用して復元されます。

 imageView.image = [UIImage imageWithData:coreDataEntity.image];

ただし、復元されたイメージは、上端が左を向いた状態で反時計回りに 90 度回転しています。

画像はどの時点で回転しますか? 保存中ですか、それともコアデータからの読み込み中ですか?

UIImage を 90 度回転する方法がありますが、その後同じ画像を再読み込みすると、さらに 90 度回転したように見えます。UIImage を 1 回回転したことを確認するにはどうすればよいですか?

助けてくれてありがとう!

4

5 に答える 5

10

1 年後、あなたはおそらくこれを自分で解決したでしょうが、私は最近この問題を自分で経験したので、自分の解決策を提示しようと思いました。

保存する画像形式をJPEGに変更しました。

変化する

coreDataEntity.image = UIImagePNGRepresentation(imageView.image);

coreDataEntity.image = UIImageJPEGRepresentation(imageView.image,1.0f);

画像は以前のように復元されます

imageView.image = [UIImage imageWithData:coreDataEntity.image];

これが誰かに役立つことを願っています。

于 2013-06-19T15:26:01.840 に答える
5

データベースにフォーマットを強制しません。データベースに保存する前に PNG に変換することで、おそらく必要となる情報 (向きなど) を削除します。

私の仮説が正しければ、代わりに次のように UIImage をシリアル化してみてください。

[NSKeyedArchiver archivedDataWithRootObject:image]

これでデシリアライズします

[NSKeyedUnarchiver unarchiveObjectWithData:imageData]

また、この変換をカプセル化できる を必ずチェックしてくださいNSValueTransformer。これにより、一度機能すると対処する必要がなくなります。

于 2012-04-20T12:00:48.640 に答える
1

私の推測では、ロード中または保存中ではありません。画像を 90 度回転させる方法があり、それが画像に起こっていることに疑いがあります。メソッドを別の角度 (たとえばゼロ) で回転するように変更してみて、それがバグに影響することを確認してください。あなたの回転メソッドが呼び出されていると思われますが、あなたはそれを知りません。

もう 1 つの可能性は、写真を撮るときに iPhone/iPad を横向きに持っているが、アプリがデバイスの回転をサポートしていないことです。

あなたの投稿には本当に多くの情報がないので、私はここで釣りをしています:)

于 2012-04-20T11:56:47.433 に答える