#include "process.h" #include "main.h" #include "common.h" #include "image.h" #include "paint.h" double get_s() { double ret; struct timespec t; clock_gettime(CLOCK_REALTIME, &t); ret=((double)t.tv_nsec)/1000000000.0+((double)t.tv_sec); return ret; } void minimise(int w, int h, uint8_t* out, image_t* iout, const image_t* in) { int i,j,x,y; int dx=in->w/w; int dy=in->h/h; for(i=0, x=0; iw; i+=dx, x++) { for(j=0, y=0; jh; j+=dy, y++) { int k,l, nr=0, ng=0, nb=0, nm=0; for(k=i; kw; k++) { for(l=j; lh; l++) { //IMG_SET(iout, k,l, IMG_GET(in,k,l)); nr+=IMG_GET_R(in, k,l); ng+=IMG_GET_G(in, k,l); nb+=IMG_GET_B(in, k,l); nm+=IMG_GET_M(in, k,l); } } ng/=(dx*dy); nr/=(dx*dy); nb/=(dx*dy); nm/=(dx*dy); if(nr>200) nr=255; else nr=0; if(ng>200) ng=255; else ng=0; if(nb>200) nb=255; else nb=0; fill_rect(iout,POINT(i,j), POINT(dx,dy), COLOR_RGB(nr,ng,nb)); if(ng>200 && nr+ng<200) { out[y*w+x]|=1; //fill_rect(iout,POINT(i,j), POINT(dx,dy), COLOR(0xFF00)); } } } } void process(image_t* out, const image_t* in) { uint8_t tab[64*48]={0}; //image_mem_copy(out, in); //sat(out, in,80); minimise(320,240,tab, out,in); /*draw_line(out, POINT(0,0), POINT(640,480), COLOR(0xFF0000)); draw_line(out, POINT(0,479), POINT(640,-480), COLOR(0xFF0000)); fill_circle(out, POINT(300,300), 70, COLOR(0xFF0000));*/ int i,j; int xmin=out->w, ymin=out->h, xmax=0, ymax=0; int ya=0,xa=0,xb=0,yb=9; for(i=0; iw; i++) { for(j=0; jh; j++) { int g = IMG_GET_G(out, i, j); int r = IMG_GET_R(out, i, j); int b = IMG_GET_B(out, i, j); if(g==255 && !r && !b) { if(i>xmax) {xmax=i; ya=j;} if(j>ymax) {ymax=j; xa=i;} if(i %d,%d\n", xmax,ya, xa, ymax); draw_line(out, POINT(xa, ymax), POINT(xmin-xa, yb-ymax), COLOR(0)); draw_line(out, POINT(xmin, yb), POINT(xb-xmin,ymin-yb), COLOR(0)); draw_line(out, POINT(xb,ymin),POINT(xmax-xb,ya-ymin), COLOR(0)); draw_circle(out, POINT(xmax,ya), 5, COLOR(0xFF0000)); draw_circle(out, POINT(xmin,yb), 5, COLOR(0xFF0000)); draw_circle(out, POINT(xa,ymin), 5, COLOR(0xFF0000)); draw_circle(out, POINT(xb,ymax), 5, COLOR(0xFF0000)); }