SDL_imageのバグ?
2005年4月18日SusieプラグインをSDLを使って作ってみようとしたところ、SDL_image のバグに遭遇。
W487H690 24Bppの画像をSDL_mixer1.2.4を使って読み込むと、
SDL_Surface::wとSDL_Surface::h、SDL_Surface::format->BytesPerPixelは、元画像の値と等しい値となるのだが、なぜかSDL_Surface::pitchの値がおかしくなる。
通常、
// イメージの読み込み
SDL_Surface* sf = IMG_Load_RW ( ... ) ;
if ( sf->w == sf->pitch /format->BytesPerPixel ) {
printf ("OK!") ;
}else{
printf ("BAD!") ;
}
というプログラムは、OK!と表示されるはずなんだが、この形式だと、なぜかBAD!と表示され、しかも、格納されている画像のサイズは
W=sf->pitch / sf->format->BytesPerPixel != sf->w ;
H=sf->h ;
となってしまう。
画像をピクセルごとに表示して試してみたところ、どうも、メモリ上に展開されている画像の幅が、1ピクセル分だけ増えているようである。
そのため、元の画像に等しい値であるsf->wがメモリ上で展開されている画像の横幅のバイト数を示しているsf->pitchとつりあわなくなり、sf->wを基準にして画像を表示しようとすると、高さに対して1ピクセルずつ表示に横ずれが起こり、正常に画像が表示できなくなるバグが発生する。
そこで、解決方法としては、
sf->w = sf->pitch / sf->format->BytesPerPixel ;
として、横幅をメモリ上に展開されている画像に合わせて調整しなおすということが考えられる。
しかし、この方法では、元画像を正しく表示できない(1ピクセル分横幅が伸びる)ことになるため、あまり意味がない。
これは、SDL_imageそのもののソースをじっくり見なければならないんだろうか…バグフィックスでネタが書けるな。
むむぅ。
W487H690 24Bppの画像をSDL_mixer1.2.4を使って読み込むと、
SDL_Surface::wとSDL_Surface::h、SDL_Surface::format->BytesPerPixelは、元画像の値と等しい値となるのだが、なぜかSDL_Surface::pitchの値がおかしくなる。
通常、
// イメージの読み込み
SDL_Surface* sf = IMG_Load_RW ( ... ) ;
if ( sf->w == sf->pitch /format->BytesPerPixel ) {
printf ("OK!") ;
}else{
printf ("BAD!") ;
}
というプログラムは、OK!と表示されるはずなんだが、この形式だと、なぜかBAD!と表示され、しかも、格納されている画像のサイズは
W=sf->pitch / sf->format->BytesPerPixel != sf->w ;
H=sf->h ;
となってしまう。
画像をピクセルごとに表示して試してみたところ、どうも、メモリ上に展開されている画像の幅が、1ピクセル分だけ増えているようである。
そのため、元の画像に等しい値であるsf->wがメモリ上で展開されている画像の横幅のバイト数を示しているsf->pitchとつりあわなくなり、sf->wを基準にして画像を表示しようとすると、高さに対して1ピクセルずつ表示に横ずれが起こり、正常に画像が表示できなくなるバグが発生する。
そこで、解決方法としては、
sf->w = sf->pitch / sf->format->BytesPerPixel ;
として、横幅をメモリ上に展開されている画像に合わせて調整しなおすということが考えられる。
しかし、この方法では、元画像を正しく表示できない(1ピクセル分横幅が伸びる)ことになるため、あまり意味がない。
これは、SDL_imageそのもののソースをじっくり見なければならないんだろうか…バグフィックスでネタが書けるな。
むむぅ。
コメント