タグ別アーカイブ: Programming

PNGのIDATチャンクで悩んだ話

やりたくなってPNGを読み込むプログラムで悩んだことがあったので記録代わりに

今回は必須チャンクのみ。

ある程度書き終わってテストしていると読み込みに成功する画像と失敗する画像がある。
どうもIDATチャンクが複数に分かれている画像は読み込みに失敗しているらしい。

更に詳しく見てみると、1つ目以降のIDATチャンクのデータの伸長を失敗していた。

この時私はIDATのデータは1つ1つ伸長していくものだと思っていたが、どうやらすべてのデータを繋げた後に伸長をするようだ。

こんなことにしばらく悩んだことが腹立たしい。
そもそも何故IDATチャンクを複数に分ける必要があるのだろうか…
きっと意味があるのだろう。

IDATチャンクが複数あるときは連続しているようなので、割りと簡単にコードを書くことができた。

せっかくOculusを買ったというのに全く活用できないでいる。
こんなところで躓いていないでさっさとOculusを使ったゲームを作りたい。

BitmapのImageSizeに対する文句

しばらく前にBitmapを自力で読み込むコードを書いたのでそれに関する愚痴&メモ
Bitmapのフォーマットについては「BitMap フォーマット」でググればいくらでも説明が出てくるのでその辺の詳しい説明はなしで。

BITMAPINFOHEADERにはImageSizeとかSizeImageとか呼ばれる画像データ部のサイズを格納する部分がある。
しかしコイツが何の役にも立たない。というか邪魔だ。

Windowsのペイントでの保存やフォトビューワーで回転した後の保存ではImageSizeに0が書き込まれる(正常なサイズが入っていることもあったが違いは不明)。
ということは読み込みをする時には読み込んだImageSizeなど無視してその他の情報を元に自分で計算する必要がある。

GIMPでの保存時は正常な値が書き込まれていたが、ImageSizeが0のBitmapを読み込めるということは最初からその部分はあてにしていないのだろう。

GCCコンパイラを使いたい

最近はGCCコンパイラを使いたくてアレコレしてます。
理由はVisual Studioで使えないC++11の規格を使用するため。

とりあえずMinGWをインストールしてテスト用のコードをコンパイルすると

main.cpp: In function ‘int main()’:
main.cpp:6:20: error: ‘to_string’ is not a member of ‘std’
std::string str = std::to_string(123);

とかいうエラーが出ました。
意味はわかるけど理由がわからん…
std::threadでも同じようなエラーがでました。

これどうやったら解決できるんだろう…

 

ちなみにコンパイルしたコードは以下の通り
//======================================================================

#include <iostream>
#include <string>

int main()
{
std::string str = std::to_string(123);
return 0;
}

//=======================================================================

OpenALの使用に関して

自作ゲームの音楽の再生にOpenALを使おういろいろ苦戦していたのでその記録を

そもそも使おうと考えた理由は
1.WinAPIとDirectXへの依存を少しでも減らしたかった
2.そっちの方が面白そうだった

まず驚いたのが公式サイト(?)が消滅していること。
調べてみると現在はOpenAL Softというものを使えばいいらしい。

また便利機能を提供してくれるALUTというライブラリがあったらしいが現在はALUREというライブラリを使えば良いそうだ。

ライブラリを2つリンクするのが嫌だったのもありOpenAL Softのみを使用することにした。

そうなるとwaveなんかの読み込みも自分でやらなければならないらしい。
数日苦労したが知識が増えたのでまあいいだろう。
現在はwaveしか読み込めない。ストリーミングもできない。それは今後の課題。

ALの仕様書およびリファレンスを日本語訳されている方がいて非常に助かっている。
こういう時に英語を読めればと思う。

とりあえず完成したものをライブラリとして他人に提供しようかと考えたがライセンス関係が全くわからない。
LGPLらしいがその内容が詳しく分からない。
ソースコードを公開する必要があるなら提供したくない。

2013/12/10 23:41 誤字修正