PNG画像データの透過判別
PNGの画像データにtRNSチャンクがあるかどうか判別するコードです。
tRNSチャンクがあるという事は、透過PNGという事です。
ファイルから読み出しメモリ上にあるデータを探索します。
//void* fileBuffer; メモリに展開された画像データの先頭を示すポインタ //int dwSize; ファイルサイズ typedef unsigned char u8; typedef unsigned int u32; bool transparency = false; u8 *dat; = static_cast<u8*>(fileBuffer); dat += 8; while( dat < static_cast<u8*>(fileBuffer) + dwSize ){ u32 chunksize = *reinterpret_cast<u32*>(dat); //エンディアン変換 リトルエンディアン環境の場合 chunksize = (((chunksize ) & 0xff) << 24) | (((chunksize >> 8 ) & 0xff) << 16) | (((chunksize >> 16) & 0xff) << 8 ) | (((chunksize >> 24) & 0xff) ); dat += 4; if( dat[0] == 't' && dat[1] == 'R' && dat[2] == 'N' && dat[3] == 'S' ){ transparency = true; break; } dat += 4; dat += chunksize; dat += 4; }