lafarren.com
// Darren Lafreniere // Purveyor of fine code and assorted algorithms #include <assert.h> #include <fstream> #include <iostream> int main(int argc, char *argv[]) { const char* filename = "hw.ppm"; const int scale = 10; const int bg = 255; const int fg0 = 224; const int fg1 = 32; const int intBits = sizeof(int) * 8; assert(intBits == 32); const int cols = 2; const unsigned int data[][cols] = { {0}, {0}, {0}, {0}, {0}, {0}, {39653568, 2308738624}, {38867232, 2320664896}, {64819488, 2858191168}, {38867232, 2857535744}, {39705792, 1368583744}, {0}, {0}, {0}, {0}, {0}, {0}, }; const int rows = sizeof(data) / sizeof(data[0]); std::ofstream f(filename, std::ios::out | std::ios::binary); f << "P6\n" << (cols * intBits * scale) << " " << (rows * scale) << "\n255\n"; for (int r = 0; r < rows; ++r) { for (int y = 0; y < scale; ++y) { const float a = (r * scale + y) / (rows * scale - 1.0f); const unsigned char fg = static_cast<unsigned char>((fg1 - fg0) * a + fg0); for (int c = 0; c < cols; ++c) { const unsigned int d = data[r][c]; for (int bit = intBits; --bit >= 0; ) { const unsigned char i = (d >> bit & 1) ? fg : bg; for (int x = 0; x < scale; ++x) { f << i << i << i; } } } } } std::cout << "Wrote " << filename << std::endl; return 0; }