iff2braille.c - ff2txt - farbfeld image to plain text visualization Err bitreich.org 70 hgit clone git://bitreich.org/ff2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ff2txt URL:git://bitreich.org/ff2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ff2txt bitreich.org 70 1Log /scm/ff2txt/log.gph bitreich.org 70 1Files /scm/ff2txt/files.gph bitreich.org 70 1Refs /scm/ff2txt/refs.gph bitreich.org 70 1Tags /scm/ff2txt/tag bitreich.org 70 1README /scm/ff2txt/file/README.gph bitreich.org 70 i--- Err bitreich.org 70 iff2braille.c (2624B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 /* Err bitreich.org 70 i 2 * Transforming an image into a braille character text is transforming a Err bitreich.org 70 i 3 * matrice this way: Err bitreich.org 70 i 4 * Err bitreich.org 70 i 5 * farbfeld image braille characters Err bitreich.org 70 i 6 * Err bitreich.org 70 i 7 * [[a0 a1 a2 a3 a4 a5] [[[a0 a1 [a2 a3 [a4 a5 \ Err bitreich.org 70 i 8 * [b0 b1 b2 b3 b4 b5] b0 b1 / b2 b3 / b4 b5 |<- One braille Err bitreich.org 70 i 9 * [c0 c1 c2 c3 c4 c5] c0 c1 / c2 c3 / c4 c5 | character Err bitreich.org 70 i 10 * [d0 d1 d2 d3 d4 d5] => d0 d1] d2 d3] d4 d5]] / Err bitreich.org 70 i 11 * [e0 e1 e2 e3 e4 e5] [[e0 e1 [e2 e3 [e4 e5 Err bitreich.org 70 i 12 * [f0 f1 f2 f3 f4 f5] f0 f1 / f2 f3 / f4 f5 Err bitreich.org 70 i 13 * [g0 g1 g2 g3 g4 g5] g0 g1 / g2 g3 / g4 g5 Err bitreich.org 70 i 14 * [h0 h1 h2 h3 h4 h5]] h0 h1] h2 h3] h4 h5]]] Err bitreich.org 70 i 15 * Err bitreich.org 70 i 16 * braille characters written as a line: Err bitreich.org 70 i 17 * Err bitreich.org 70 i 18 * [[[a0 a1 b0 b1 c0 c1 d0 d1] <- One braille character Err bitreich.org 70 i 19 * [a2 a3 b2 b3 c2 c3 d2 d3] Err bitreich.org 70 i 20 * [a4 a5 b4 b5 c4 c5 d4 d5]] <- One row of braille characters Err bitreich.org 70 i 21 * [[e0 e1 f0 f1 g0 g1 h0 h1] Err bitreich.org 70 i 22 * [e2 e3 f2 f3 g2 g3 h2 h3] Err bitreich.org 70 i 23 * [e4 e5 f4 f5 g4 g5 h4 h5]]] <- Two row of braille characters Err bitreich.org 70 i 24 * Err bitreich.org 70 i 25 * Although the encoding of braille keeps 1 4 Err bitreich.org 70 i 26 * the characters encoded with only six 2 5 Err bitreich.org 70 i 27 * dots first, as only these are used for 3 6 Err bitreich.org 70 i 28 * encoding letters: 7 8 Err bitreich.org 70 i 29 */ Err bitreich.org 70 i 30 Err bitreich.org 70 i 31 #include Err bitreich.org 70 i 32 #include Err bitreich.org 70 i 33 #include Err bitreich.org 70 i 34 #include Err bitreich.org 70 i 35 Err bitreich.org 70 i 36 #include "util.h" Err bitreich.org 70 i 37 Err bitreich.org 70 i 38 void Err bitreich.org 70 i 39 print_utf8_3byte(long rune) Err bitreich.org 70 i 40 { Err bitreich.org 70 i 41 printf("%c%c%c", Err bitreich.org 70 i 42 (char)(0xe0 | (0x0f & (rune >> 12))), /* 1110xxxx */ Err bitreich.org 70 i 43 (char)(0x80 | (0x3f & (rune >> 6))), /* 10xxxxxx */ Err bitreich.org 70 i 44 (char)(0x80 | (0x3f & (rune)))); /* 10xxxxxx */ Err bitreich.org 70 i 45 } Err bitreich.org 70 i 46 Err bitreich.org 70 i 47 int Err bitreich.org 70 i 48 is_on(struct col *rows[4], uint32_t width, uint32_t height, Err bitreich.org 70 i 49 uint32_t w, uint32_t h) Err bitreich.org 70 i 50 { Err bitreich.org 70 i 51 if (w >= width || h >= height) Err bitreich.org 70 i 52 return 0; Err bitreich.org 70 i 53 Err bitreich.org 70 i 54 return col_is_bright(rows[h][w]); Err bitreich.org 70 i 55 } Err bitreich.org 70 i 56 Err bitreich.org 70 i 57 void Err bitreich.org 70 i 58 print_4_rows(struct col *rows[4], uint32_t width, uint32_t height) Err bitreich.org 70 i 59 { Err bitreich.org 70 i 60 uint32_t w; Err bitreich.org 70 i 61 Err bitreich.org 70 i 62 for (w = 0; w < width; w += 2) Err bitreich.org 70 i 63 print_utf8_3byte(BRAILLE_START + Err bitreich.org 70 i 64 0x01 * is_on(rows, width, height, w + 0, 0) + Err bitreich.org 70 i 65 0x08 * is_on(rows, width, height, w + 1, 0) + Err bitreich.org 70 i 66 0x02 * is_on(rows, width, height, w + 0, 1) + Err bitreich.org 70 i 67 0x10 * is_on(rows, width, height, w + 1, 1) + Err bitreich.org 70 i 68 0x04 * is_on(rows, width, height, w + 0, 2) + Err bitreich.org 70 i 69 0x20 * is_on(rows, width, height, w + 1, 2) + Err bitreich.org 70 i 70 0x40 * is_on(rows, width, height, w + 0, 3) + Err bitreich.org 70 i 71 0x80 * is_on(rows, width, height, w + 1, 3)); Err bitreich.org 70 i 72 putchar('\n'); Err bitreich.org 70 i 73 } Err bitreich.org 70 i 74 Err bitreich.org 70 i 75 int Err bitreich.org 70 i 76 main(void) Err bitreich.org 70 i 77 { Err bitreich.org 70 i 78 struct col buf[MAX_WIDTH * 4], *rows[4]; Err bitreich.org 70 i 79 uint32_t width, height, h, r, i; Err bitreich.org 70 i 80 Err bitreich.org 70 i 81 read_header(&width, &height); Err bitreich.org 70 i 82 Err bitreich.org 70 i 83 for (i = 0; i < 4; i++) Err bitreich.org 70 i 84 rows[i] = buf + width * i; Err bitreich.org 70 i 85 Err bitreich.org 70 i 86 for (h = 0; h < height; h += 4) { Err bitreich.org 70 i 87 r = fread(buf, sizeof(*buf), width * 4, stdin); Err bitreich.org 70 i 88 if (r % width != 0) Err bitreich.org 70 i 89 err("invalid line width"); Err bitreich.org 70 i 90 if (ferror(stdin)) Err bitreich.org 70 i 91 err("fread stdin"); Err bitreich.org 70 i 92 print_4_rows(rows, width, r / width); Err bitreich.org 70 i 93 } Err bitreich.org 70 i 94 Err bitreich.org 70 i 95 return 0; Err bitreich.org 70 i 96 } Err bitreich.org 70 .