今は修正されていますが、一時 BBitmap::SetBits() と B_RGB32 で問題が出ていたようです。B_RGB32 は本来BGRA (32ビットリトルエンディアン) の色空間ですが、BeOS の仕様上、BBitmap::SetBits() で B_RGB32 を使用する際には、RGB (24ビットビッグエンディアン、B_RGB24_BIG) のデータを与える必要があるようです。ところが、問題の発生したリビジョンでは、この BeOS 互換機能が削除されていたので、SetBits() & B_RGB32 に 24ビットデータを与えると表示が乱れてしまいました。
SetBits() に与える色空間を R_RGB24_BIG にすると 24ビットデータで問題なく表示されました。
Haiku で新しく導入された BBitmap::ImportBits() で、色空間を B_RGB32 に、 bpr をイメージ幅の 3倍にして試してみましたが、やはり 24ビットデータでは表示は乱れます。SetBits() とは違い、 B_RGB32 のときはきちんと 32ビットデータを渡さないといけないようです。B_RGB24_BIG では ImportBits() でも問題なく表示されました。
現在、BBitmap::SetBits() は deprecated になっているようなので、B_RGB32 色空間のビットマップにデータをセットする場合は、32ビットデータにして ImportBits() を使うのが良いようです。そもそもなんで 24ビットだったんでしょうねぇ? データを節約したかった??
0 件のコメント:
コメントを投稿