// 全ピクセルに対して、色を条件判定して置き換える処理を実行 for (int y=0; y < height; y++) { // 画像の縦方向へのピクセル単位のループ(上から下) for (int x=0; x < width; x++) { // 画像の横方向へのピクセル単位のループ(左から右) // このピクセル上での赤,緑,青,α成分を1文字変数に控える //(透明化の条件式を簡単に書けるようにするため) int r = pixel[y][x][0]; // 赤成分(0〜255) int g = pixel[y][x][1]; // 緑成分(0〜255) int b = pixel[y][x][2]; // 青成分(0〜255) int a = pixel[y][x][3]; // α成分(0〜255、0で完全な透明、255で完全な不透明) // ユーザーが入力した条件式(グローバル変数condition)が文法的に解釈可能か検査 if ( !evaluable(condition) ) { alert("条件を解釈できません。終了します..."); exit(); } // 条件式を評価し、このピクセルの色が透明化対象であるかどうかを bool 型変数に控える // (条件式が文法的に正しくても、値がbool型ではない場合はここで型変換エラーとなる) bool shouldReplaceColor = eval(condition); // 評価結果が true なら透明化対象なので、ピクセルの色を書き換える if (shouldReplaceColor) { pixel[y][x][0] = toRed; pixel[y][x][1] = toGreen; pixel[y][x][2] = toBlue; pixel[y][x][3] = toAlpha; } } }