From d7d2d912b08f657720f50af8fd6bb2f72a9c32c0 Mon Sep 17 00:00:00 2001 From: Brad Grantham Date: Fri, 18 Nov 2016 11:33:50 -0800 Subject: [PATCH] utility to extract C from font image --- apple2font.ppm | Bin 0 -> 49167 bytes extractglyphs.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 apple2font.ppm create mode 100644 extractglyphs.cpp diff --git a/apple2font.ppm b/apple2font.ppm new file mode 100644 index 0000000000000000000000000000000000000000..3fdc8292779d54f2b5092bafecdc5d997ee2d675 GIT binary patch literal 49167 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 lf$IxgU*P%z*B7|H!1V>LFK~T<>kC|8;Q9jB7x +#include +#include +#include +#include +#include + +#include + +using namespace std; + +// image_out and image_in have identical dimensions +void extract_glyph(fipImage &image_in, int g, unsigned char glyph[8]) +{ + int glyphs_across = image_in.getWidth() / 7; + int x = (g % glyphs_across) * 7; + int y = (g / glyphs_across) * 8; // XXX why invert in Y? + for(int j = 0; j < 8; j++) { + unsigned char byte = 0; + for(int i = 0; i < 7; i++) { + RGBQUAD result; + image_in.getPixelColor(x + i, image_in.getHeight() - 1 - (y + j), &result); + int pixel = (result.rgbRed > 127) ? 1 : 0; + byte = byte | (pixel << i); + } + glyph[j] = byte; + } +} + +int main(int argc, char **argv) +{ + if(argc != 2) { + printf("usage: %s input\n", argv[0]); + exit(EXIT_FAILURE); + } + + fipImage image_in; + bool success; + + if (!(success = image_in.load(argv[1]))) { + cerr << "Failed to load image from " << argv[1] << endl; + exit(EXIT_FAILURE); + } + + printf("int font_offset = 32;\n"); + printf("unsigned char font_bytes[][8] = {\n"); + + static unsigned char font[96][8]; + for(int i = 0; i <= 95; i++) { + extract_glyph(image_in, i, font[i]); + printf(" {"); + + for(int j = 0; j < 8; j++) + printf("0x%02X%s", font[i][j], (j < 7) ? ", " : ""); + + if(i < 95) + printf("},\n"); + else + printf("}\n"); + } + + printf("};\n"); + + exit(EXIT_SUCCESS); +} +