Ryo Suzuki
Ryo Suzuki
ご報告ありがとうございます。 v0.6.17 で、GLFW コードに上記の修正のみ取り込むという対処でよろしいでしょうか。 問題なければ近日中に反映しようと思います。
調査ありがとうございます。`Exif` クラスの使用はかなり非効率ですね。 `JPEGDecoder.cpp` 内または public な API に回転取得専用の関数を用意したいところです。 - ① 既存の JPEG デコーダの実装方式(ストリーミング)と相性が悪そう - ② `getImageInfo()` でもやるのか といった課題が残ります。 https://github.com/Siv3D/OpenSiv3D/blob/main/Siv3D/src/Siv3D/ImageFormat/JPEG/JPEGDecoder.cpp
Siv3D の JPEG デコーダはファイルの内容を全部読み込んでいましたね。別のデコーダと混同していました。① は取り消します。 ② についても、回転情報がファイルの冒頭にあるならそこまで問題にならないと思います。
`ReadExifOrientation(IReader&)` を JPEGDecoder.cpp に実装し、 decode では MemoryViewReader を渡して、getImageInfo では IReader を渡して使うのが良いのかなと思いました。 decode では、回転情報に応じて Image を加工して返すようにしましょう。
加工にあたっては、若干のコストは避けられないと思います。 しかし `Texture` を EXIF 情報に合わせて回転・反転させるようなコードをわざわざ書きたいユーザはそんなにいないと思うので、加工済みオンリーで良さそうな気がします。
今回の Issue は、Siv3D が Web ブラウザやビューアとは異なる画像を出したことでユーザを驚かせたことが本質なので、そこの解決にフォーカスしたいと思います。 加工しない生の画像を取得するオプションの可能性については、結論は出しません。 JPEG の回転対応は、予期せぬ影響を受けるユーザがいるかもしれないため、v0.8 から対応したいです。 `ReadExifOrientation()` については Raclamusi さんのコードなので、v8 のほうにプルリクいただくか、あるいはここで提供を表明していただければ移植します。
確かに未実装でした! 実装時に移植します。
開発中の v0.8 の `Array` に `Optional indexOf(value)` を実装しました。ご提案ありがとうございました。
ありがとうございます。 こちらは v0.8 にて Windows API を使用する方法で解決し、それを逆輸入する予定でいました。 https://github.com/Siv3D/siv8/commit/cc567afee251c793d74987054a3d95aa73a1f94d お手数をおかけしてしまい、すみません。