Changeset 3528


Ignore:
Timestamp:
May 27, 2009 7:04:23 AM (5 years ago)
Author:
sam
Message:

Increase img2twit's output contrast when rendering the final image.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpipi/trunk/examples/img2twit.cpp

    r3527 r3528  
    466466 
    467467static inline void get_point(int index, float *x, float *y, float *r, 
    468                              float *g, float *b, float *s) 
     468                             float *g, float *b, float *s, bool final = false) 
    469469{ 
    470470    uint32_t pt = points[index]; 
     
    481481    *y = (fy + dy) * RANGE_Y /*+ 0.5 * (index & 1)*/; 
    482482 
    483     *b = int2midrange(pt % RANGE_R, RANGE_R); pt /= RANGE_R; 
    484     *g = int2midrange(pt % RANGE_G, RANGE_G); pt /= RANGE_G; 
    485     *r = int2midrange(pt % RANGE_B, RANGE_B); pt /= RANGE_B; 
     483    if(final) 
     484    { 
     485        *b = int2fullrange(pt % RANGE_R, RANGE_R); pt /= RANGE_R; 
     486        *g = int2fullrange(pt % RANGE_G, RANGE_G); pt /= RANGE_G; 
     487        *r = int2fullrange(pt % RANGE_B, RANGE_B); pt /= RANGE_B; 
     488    } 
     489    else 
     490    { 
     491        *b = int2midrange(pt % RANGE_R, RANGE_R); pt /= RANGE_R; 
     492        *g = int2midrange(pt % RANGE_G, RANGE_G); pt /= RANGE_G; 
     493        *r = int2midrange(pt % RANGE_B, RANGE_B); pt /= RANGE_B; 
     494    } 
    486495} 
    487496 
     
    626635} 
    627636 
    628 static void render(pipi_image_t *dst, int rx, int ry, int rw, int rh) 
     637static void render(pipi_image_t *dst, 
     638                   int rx, int ry, int rw, int rh, bool final) 
    629639{ 
    630640    int lookup[dw * RANGE_X * 2 * dh * RANGE_Y * 2]; 
     
    645655 
    646656    /* Add fake points to close the triangulation */ 
    647     dt.insert(K::Point_2(-p->w, -p->h)); 
    648     dt.insert(K::Point_2(2 * p->w, -p->h)); 
    649     dt.insert(K::Point_2(-p->w, 2 * p->h)); 
    650     dt.insert(K::Point_2(2 * p->w, 2 * p->h)); 
     657    dt.insert(K::Point_2(-dw * RANGE_X, -dh * RANGE_Y)); 
     658    dt.insert(K::Point_2(2 * dw * RANGE_X, -dh * RANGE_Y)); 
     659    dt.insert(K::Point_2(-dw * RANGE_X, 2 * dh * RANGE_Y)); 
     660    dt.insert(K::Point_2(2 * dw * RANGE_X, 2 * dh * RANGE_Y)); 
    651661 
    652662    for(y = ry; y < ry + rh; y++) 
     
    654664        for(x = rx; x < rx + rw; x++) 
    655665        { 
    656             K::Point_2 m(x, y); 
     666            K::Point_2 m((float)x * dw * RANGE_X / p->w, 
     667                         (float)y * dh * RANGE_Y / p->h); 
    657668            Point_coordinate_vector coords; 
    658669            CGAL::Triple< 
     
    672683                fy = (*it).first.y(); 
    673684 
    674                 if(fx < 0 || fy < 0 || fx > p->w - 1 || fy > p->h - 1) 
     685                if(fx < 0 || fy < 0 
     686                    || fx > dw * RANGE_X - 1 || fy > dh * RANGE_Y - 1) 
    675687                    continue; 
    676688 
     
    678690                                    + dw * RANGE_X * 2 * (int)(fy * 2)]; 
    679691 
    680                 get_point(index, &fx, &fy, &fr, &fg, &fb, &fs); 
     692                get_point(index, &fx, &fy, &fr, &fg, &fb, &fs, final); 
    681693 
    682694                //float k = pow((*it).second * (1.0 + fs), 1.2); 
     
    10551067        /* Render what we just computed */ 
    10561068        tmp = pipi_new(dw * RANGE_X, dh * RANGE_Y); 
    1057         render(tmp, 0, 0, dw * RANGE_X, dh * RANGE_Y); 
     1069        render(tmp, 0, 0, dw * RANGE_X, dh * RANGE_Y, false); 
    10581070        error = pipi_measure_rmsd(src, tmp); 
    10591071 
     
    11141126 
    11151127                render(scrap, zonex * RANGE_X, zoney * RANGE_Y, 
    1116                        zonew * RANGE_X, zoneh * RANGE_Y); 
     1128                       zonew * RANGE_X, zoneh * RANGE_Y, false); 
    11171129 
    11181130                double newerr = pipi_measure_rmsd(src, scrap); 
     
    11311143                points[pt] = candidates[bestop]; 
    11321144                /* Redraw image if the last check wasn't the best one */ 
    1133                 if(bestop != 2) 
     1145                if(bestop != 0) 
    11341146                    render(scrap, zonex * RANGE_X, zoney * RANGE_Y, 
    1135                            zonew * RANGE_X, zoneh * RANGE_Y); 
     1147                           zonew * RANGE_X, zoneh * RANGE_Y, false); 
    11361148 
    11371149                pipi_free(tmp); 
     
    12191231 
    12201232        /* Render these points to a new image */ 
    1221         tmp = pipi_new(dw * RANGE_X, dh * RANGE_Y); 
    1222         render(tmp, 0, 0, dw * RANGE_X, dh * RANGE_Y); 
    1223  
    1224         /* TODO: render directly to the final image; scaling sucks */ 
    1225         dst = pipi_resize(tmp, width, height); 
    1226         pipi_free(tmp); 
     1233        dst = pipi_new(width, height); 
     1234        render(dst, 0, 0, width, height, true); 
    12271235 
    12281236        /* Save image and bail out */ 
Note: See TracChangeset for help on using the changeset viewer.