はじめに
いつもお世話になっています。
表題の件について質問があります。
C言語でQRコードを実装しているのですが、その実装の一部にマスクの失点を計算する処理があります。
簡単に言いますと、「黒と白で構成されているQRコードにおいて同じ色が連続で続くと良くないので、
その様なパターンを減点してより点数の高いパターンを採用する」と言う処理です。
処理そのものの実装は全く難しくないのですが、連続するモジュールの算出方法を少し簡単に出来ないかな?
と思い質問しました。
C
1#define WHITE_MODULE (0x00) // この値を変える事で分かりやすくなるなら変更してもOK 2#define BLACK_MODULE (0xFF) // この値を変える事で分かりやすくなるなら変更してもOK 3typedef unsigned char BYTE; 4int ErrPointLine(BYTE *pQRdata, int version) 5{ 6 int Eret=0; /* エラーポイント */ 7// int line_max = _qr_code_info[version].side_module_num; 8 int line_max = 40; // 暫定で 40 固定 9 10 // 列 11 for( int h=0 ; h < line_max ; h++ ){ 12 int blacks = 0; 13 int whites = 0; 14 const BYTE *pHead = pQRdata + (line_max * h); 15 for(int n=0 ; n < line_max ; n++ ){ 16 BYTE LineCol = *(pHead + n); 17 18 if(LineCol == BLACK_MODULE){ 19 blacks++; 20 whites=0; 21 } 22 else if(LineCol == WHITE_MODULE){ 23 blacks=0; 24 whites++; 25 } 26 27 // 同色が5つ続くなら+3の失点 28 if(blacks == 5 || whites == 5){ 29 Eret += 3; 30 } 31 else if(blacks > 5 || whites > 5){ 32 // 以後続くたびに+1の失点 33 Eret++; 34 } 35 } 36 } 37 printf("Total Error Point = %d\n", Eret); 38 39 return Eret; 40}
良い知恵がありましたらぜひ教えてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/22 00:40
2017/03/22 06:14
2017/03/23 12:15