/* * make_pattern.cpp * Copyright 2000 Y.Takagi All Rights Reserved. */ #include #include using namespace std; #define MAX_HORTZ 4 #define MAX_VERT 4 #define MAX_ELEMENT (MAX_HORTZ * MAX_VERT) #include "original_dither_pattern.h" void create_index_table(const unsigned char *p1, unsigned char *p2) { for (int i = 0 ; i < MAX_ELEMENT ; i++) { p2[*p1] = i; p1++; } } inline int index2horz(int index) { return index % MAX_HORTZ; } inline int index2vert(int index) { return index / MAX_HORTZ; } void create_pattern16x16(const unsigned char *pattern4x4, unsigned char *pattern16x16) { unsigned char value2index[MAX_ELEMENT]; create_index_table(pattern4x4, value2index); for (int i = 0 ; i < MAX_ELEMENT ; i++) { int index = value2index[i]; int h = index2horz(index); int v = index2vert(index); for (int j = 0 ; j < MAX_ELEMENT ; j++) { int index2 = value2index[j]; int h2 = index2horz(index2) * 4 + h; int v2 = index2vert(index2) * 4 + v; pattern16x16[h2 + v2 * MAX_ELEMENT] = j + i * MAX_ELEMENT; } } } void print_pattern(ostream &os, const char *name, const unsigned char *pattern) { os << "const unsigned char " << name << "[] = {" << '\n' << '\t'; for (int i = 0 ; i < 256 ; i++) { os << setw(3) << (int)pattern[i]; if (i == MAX_ELEMENT * MAX_ELEMENT - 1) { os << '\n'; } else { os << ','; if (i % MAX_ELEMENT == MAX_ELEMENT - 1) { os << '\n' << '\t'; } } } os << "};" << '\n'; } int main() { unsigned char pattern16x16_type1[MAX_ELEMENT * MAX_ELEMENT]; create_pattern16x16(pattern4x4_type1, pattern16x16_type1); print_pattern(cout, "pattern16x16_type1", pattern16x16_type1); cout << endl; unsigned char pattern16x16_type2[MAX_ELEMENT * MAX_ELEMENT]; create_pattern16x16(pattern4x4_type2, pattern16x16_type2); print_pattern(cout, "pattern16x16_type2", pattern16x16_type2); cout << endl; unsigned char pattern16x16_type3[MAX_ELEMENT * MAX_ELEMENT]; create_pattern16x16(pattern4x4_type3, pattern16x16_type3); print_pattern(cout, "pattern16x16_type3", pattern16x16_type3); cout << endl; return 0; }