From 0051984495aa2a5ed61224a7618f5bbd04311f7a Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 31 May 2009 23:24:50 +0100 Subject: [PATCH] WIP ocr --- .gitignore | 4 +++ pctb/Makefile | 5 ++++ pctb/convert.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ pctb/wrap-wip | 8 ++++++ 4 files changed, 92 insertions(+) create mode 100644 pctb/Makefile create mode 100644 pctb/convert.c create mode 100755 pctb/wrap-wip diff --git a/.gitignore b/.gitignore index 2ad500a..cfb08ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ *~ t + +pctb/t.* +pctb/u.* +pctb/convert diff --git a/pctb/Makefile b/pctb/Makefile new file mode 100644 index 0000000..bff47f5 --- /dev/null +++ b/pctb/Makefile @@ -0,0 +1,5 @@ +LDLIBS += -lnetpbm +CFLAGS += -Wall -Wwrite-strings -Wpointer-arith -Wmissing-prototypes \ + -Wstrict-prototypes + +all: convert diff --git a/pctb/convert.c b/pctb/convert.c new file mode 100644 index 0000000..80bc894 --- /dev/null +++ b/pctb/convert.c @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include + +#define eassert assert + +typedef struct { + unsigned long rgb; /* on screen */ + char c; /* canonical */ +} CanonColourInfo; + +static const CanonColourInfo canoncolourinfos[]= { + { 0x475A5E, '*' }, /* edge */ + { 0x7D9094, '+' }, /* interbox */ + { 0xBDC5BF, ' ' }, /* background - pale */ + { 0xADB5AF, ' ' }, /* background - dark */ + { 0x000000, 'o' }, /* foreground */ + { 0xD4B356, ' ' }, /* background (cursor) */ + { 0xFFFFFF, 'o' }, /* foreground (cursor) */ + { 0,0 } +}; + +static int height, width; +static char *image; + +static void load_image_and_canonify(void) { + struct pam inpam; + unsigned char rgb[3]; + int x,y,r; + const CanonColourInfo *cci; + + pnm_readpaminit(stdin, &inpam, sizeof(inpam)); + height= inpam.height; + width= inpam.width; + eassert(inpam.maxval == 255); + eassert(inpam.bytes_per_sample == 1); + + image= malloc(width*height); + eassert(image); + memset(image,'?',width*height); + + for (y=0; yc; cci++) + if (cci->rgb == rgb_l) { + image[y*width + x]= cci->c; + break; + } + if (y==234 && x==82) { + printf("y=%d/%d x=%d/%d rgb=%d,%d,%d rgb_l=%lx c=%c\n", + y,height,x,width, rgb[0],rgb[1],rgb[2], rgb_l, image[y*width+x]); + } + } + r= fwrite(image + y*width, 1,width, stdout); eassert(r==width); + putchar('\n'); + } + eassert(!fflush(stdout)); + eassert(!ferror(stdout)); +} + +int main(void) { + load_image_and_canonify(); + /* + find_main_rectangle(); + repeatedly_find_top_thing(); + */ + return 0; +} diff --git a/pctb/wrap-wip b/pctb/wrap-wip new file mode 100755 index 0000000..5c5bc1e --- /dev/null +++ b/pctb/wrap-wip @@ -0,0 +1,8 @@ +#!/bin/bash +set -ex + +xwd -name 'Puzzle Pirates - Aristarchus on the Midnight ocean' >t.xwd +# 60-odd commodity pages! Will take ~2 mins to run through them all + +convert t.xwd t.pnm +pnmdepth u.pnm -- 2.30.2