OpenSiv3D
OpenSiv3D copied to clipboard
BMP サポートの強化(1-bit, 4-bit, 16-bit, 特殊なヘッダやパレットのロード)
- reported by: https://twitter.com/raclamusi/status/1758153052765495783?t=4ToByV_uslHfaD724ohQQg&s=19
- 16-bit BMP は Microsoft Paint で保存できる形式ではなく、マイナーですが、1, 4, 8, 24, 32-bit に対応して 16-bit だけ対応しないのも変なので、16-bit にも一緒に実装していいですか?
- 現在の実装では、バッファの確保 (
std::malloc) に失敗すると透明な画像を返す実装になっているので、std::bad_allocもしくはstd::length_errorを投げるように変更したいです。一緒に実装しようと思っていますが、別で issue 立てたほうがいいですか?
https://github.com/Siv3D/OpenSiv3D/blob/33ec9281b6968592a6835ec1772d7571fc94228f/Siv3D/src/Siv3D/ImageFormat/BMP/BMPDecoder.cpp?ts=4#L126
- では対応しましょう。テスト用に各フォーマットの bmp ファイルを用意してください(コミットには含まず)。
std::bad_allocを使うようにして大丈夫です。
ヘッダと画像データの間にギャップがあるとき、および、パレットの色数が最大でないときに正しく読み込めないバグがありました。 一緒に直します。
テスト用ソースコード: https://gist.github.com/Raclamusi/039af3aa2698424a3bfc48e885224f94 テスト用画像ファイル: https://drive.google.com/drive/folders/1UFL-rqHZ3wjn-5efr_9ghWNtZ-GqYlOD?usp=sharing
テスト用コード、実装完了しました。
PR #1207 のコメントに変更についての詳しい説明を書きました。