#include #include #include #include using namespace std; // convert a .pbm raw file to our custom .lpbm format int main(int argc, char *argv[]) { unsigned char c; const int LEN = 256; char s[LEN]; cin.getline(s, LEN); if (strncmp(s, "P4", 2)) { cerr << "input file is not .pbm (P4)" << endl; return -1; } cin.getline(s, LEN); while (s[0] == '#' || s[0] == ' ') cin.getline(s, LEN); unsigned int w = 0, h = 0; if (std::sscanf(s, "%d %d", &w, &h) != 2) { cerr << "height and width not found" << endl; return -1; } if (w != 160 || h != 43) { cerr << "incorrect width / height, mandated: 160x43, found: " << w << "x" << h << endl; return -1; } cin >> noskipws; int i = 0, row = -1; unsigned char buf[160 * 48]; memset(buf, 0, 160 * 43); while (cin >> c) { if (i % 20 == 0) row++; if (row == 8) row = 0; buf[7 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 0) & 0x01) << row; buf[6 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 1) & 0x01) << row; buf[5 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 2) & 0x01) << row; buf[4 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 3) & 0x01) << row; buf[3 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 4) & 0x01) << row; buf[2 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 5) & 0x01) << row; buf[1 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 6) & 0x01) << row; buf[0 + (i % 20) * 8 + i / 160 * 160] |= ((c >> 7) & 0x01) << row; i++; } if (i != 160 * 43 / 8) { cerr << "wrong number of bytes, expected " << 160 * 43 / 8 << ", got " << i << endl; } for (int i = 0; i < 160 * 48 / 8; i++) { cout << hex << (char)buf[i]; } }