12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #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; i<in->w; i+=dx, x++)
- {
- for(j=0, y=0; j<in->h; j+=dy, y++)
- {
- int k,l, nr=0, ng=0, nb=0, nm=0;
- for(k=i; k<i+dx && k<in->w; k++)
- {
- for(l=j; l<j+dy && l<in->h; 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; i<out->w; i++)
- {
- for(j=0; j<out->h; 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<xmin) {xmin=i; yb=j;}
- if(j<ymin) {ymin=j; xb=i;}
- }
- }
- }
- //draw_rect(out, POINT(xmin, ymin), POINT(xmax-xmin,ymax-ymin), COLOR(0xff0000));
- draw_line(out, POINT(xmax,ya), POINT(xa-xmax, ymax-ya), COLOR(0xffffff));
- printf("%d,%d -> %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));
- }
|