#include #include #include static uint32_t canvas[16][16]; static uint32_t rgb888(int method, uint8_t rgb332) { int r, g, b, n; r = (rgb332 >> 5) & 0x07; g = (rgb332 >> 2) & 0x07; b = (rgb332 >> 0) & 0x03; switch (method) { case 0: r <<= 5; g <<= 5; b <<= 6; break; case 1: r = (r << 5) | (r << 2) | (r >> 1); g = (g << 5) | (g << 2) | (g >> 1); b = (b << 6) | (b << 4) | (b << 2) | b; break; case 2: r = (r << 5) | (r << 2) | (r >> 1); g = (g << 5) | (g << 2) | (g >> 1); b = (b << 1) | (b >> 2); b = (b << 5) | (b << 2) | (b >> 1); break; default: r = g = b = 0; break; } n = (r << 16) | (g << 8) | b; return n; } int main(int argc, char *argv[]) { int x, y, n; if (argc < 2) { printf("%s [method]\n", argv[0]); goto fin0; } /* 埋める */ n = atoi(argv[1]); for (y = 0; y < 16; y++) { for (x = 0; x < 16; x++) { canvas[y][x] = rgb888(n, (y << 4) | x); } } /* 結果を表示する */ printf("# ImageMagick pixel enumeration: 192,192,255,rgb\n"); for (y = 0; y < 192; y++) { for (x = 0; x < 192; x++) { printf("%d,%d: (%3d,%3d,%3d)\n", x, y, (canvas[y / 12][x / 12] >> 16) & 0xff, (canvas[y / 12][x / 12] >> 8) & 0xff, (canvas[y / 12][x / 12] >> 0) & 0xff); } } fin0: return 0; }