えー、こんなところでバグ発覚。今までの方法だと、x軸の補助罫線とグラフの線の区別がつかなくなるという問題が発覚。うーん、これは困った。元々上端の枠線とグラフの線が重なるっていう問題もあって、これは適当にごまかせたんだけど、さすがにこっちは難しいな・・・。
もっとも、言及数の多い声優さんについては気にしなくていい*1し、誤差があったとしても順序統計量としては変わらないので問題ないといえば問題ないんだけど、バグを放置するのもアレなので仕様変更することにします。
- 青い枠線
- 赤い線
- 黒い文字
を分けることに。ここで、再度グラフのパレット情報を確認。
chunk PLTE: --------------------------------- entries: 6 0: (ff, ff, ff) 1: (00, ff, 00) 2: (ff, 00, 00) 3: (7f, 7f, 7f) 4: (00, 00, 00) 5: (52, 79, e7)
赤と黒は分かりやすい。青は、パレット番号5番の(52, 79, e7)のようで。とりあえずこれで判別することにします。
#define COLOR_VALUE 1 #define COLOR_BORDER 2 #define COLOR_CHAR 3 #define COLOR_UNDEF 0
ptoimg = malloc(num_palette * sizeof(png_byte)); for(i=0; i<num_palette; i++, palette++){ /* making transform table */ if(palette->red == 0xff && palette->green == 0x00 && palette->blue == 0x00) ptoimg[i] = COLOR_VALUE; else if(palette->red == 0x52 && palette->green == 0x79 && palette->blue == 0xe7) ptoimg[i] = COLOR_BORDER; else if(palette->red == 0x00 && palette->green == 0x00 && palette->blue == 0x00) ptoimg[i] = COLOR_CHAR; else ptoimg[i] = COLOR_UNDEF; }
void paletted_to_image(png_structp png_ptr, png_row_infop row_info, png_bytep row) { int i; png_bytep ptoimg = (png_bytep)(png_get_user_transform_ptr(png_ptr)); for(i=0; i<row_info->width; i++){ row[i] = ptoimg[row[i]]; } }
分けてみて気づいたんだけど、色分けしたほうが何かと楽ちんということに気づいた。枠線判定とかすごい楽になった・・・。
*1:補助罫線より上に赤線が来るはずなので