OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

BMP サポートの強化(1-bit, 4-bit, 16-bit, 特殊なヘッダやパレットのロード)

Open Reputeless opened this issue 1 year ago • 6 comments

  • reported by: https://twitter.com/raclamusi/status/1758153052765495783?t=4ToByV_uslHfaD724ohQQg&s=19

Reputeless avatar Feb 15 '24 22:02 Reputeless

  1. 16-bit BMP は Microsoft Paint で保存できる形式ではなく、マイナーですが、1, 4, 8, 24, 32-bit に対応して 16-bit だけ対応しないのも変なので、16-bit にも一緒に実装していいですか?
  2. 現在の実装では、バッファの確保 ( 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

Raclamusi avatar Feb 16 '24 01:02 Raclamusi

  1. では対応しましょう。テスト用に各フォーマットの bmp ファイルを用意してください(コミットには含まず)。
  2. std::bad_alloc を使うようにして大丈夫です。

Reputeless avatar Feb 16 '24 02:02 Reputeless

ヘッダと画像データの間にギャップがあるとき、および、パレットの色数が最大でないときに正しく読み込めないバグがありました。 一緒に直します。

スクリーンショット

Raclamusi avatar Feb 22 '24 15:02 Raclamusi

テスト用ソースコード: https://gist.github.com/Raclamusi/039af3aa2698424a3bfc48e885224f94 テスト用画像ファイル: https://drive.google.com/drive/folders/1UFL-rqHZ3wjn-5efr_9ghWNtZ-GqYlOD?usp=sharing

Raclamusi avatar Feb 22 '24 15:02 Raclamusi

テスト用コード、実装完了しました。

ソースコード

Raclamusi avatar Feb 23 '24 05:02 Raclamusi

PR #1207 のコメントに変更についての詳しい説明を書きました。

Raclamusi avatar Feb 23 '24 07:02 Raclamusi