diff options
| author | Tim Redfern <tim@eclectronics.org> | 2014-01-24 10:42:38 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2014-01-24 10:42:38 +0000 |
| commit | 6ef14b732971507794ceda70b8a067b874098b9c (patch) | |
| tree | c75c88f93bc3f2356d36fd7b2beade450f3a1671 /rotord | |
| parent | fea2665479fcc34e4f8c16f8f603af714ea4abc5 (diff) | |
clamp mosaic pixels
Diffstat (limited to 'rotord')
| -rw-r--r-- | rotord/src/nodes_drawing.h | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/rotord/src/nodes_drawing.h b/rotord/src/nodes_drawing.h index f428fd8..0f8eb76 100644 --- a/rotord/src/nodes_drawing.h +++ b/rotord/src/nodes_drawing.h @@ -215,26 +215,29 @@ namespace Rotor { ~Mosaic(){}; Mosaic* clone(map<string,string> &_settings) { return new Mosaic(_settings);}; void vector_output(cairo_t * cr,const Frame_spec &frame){ - double vpix=min((double)frame.h,max(parameters["pixels"]->value,1.0)); + double vpix=max(parameters["pixels"]->value,1.0); double pixel_size=frame.h/vpix; int h_padded=ceil(vpix/2)*2; int w_padded=ceil((((vpix/frame.h)*frame.w))/2)*2; Image *in1=image_inputs[0]->get(frame); if (in1){ - Image in=*(in1); - in.crop(w_padded*pixel_size,h_padded*pixel_size); - in.resize(w_padded,h_padded); - cairo_translate(cr,-((w_padded*pixel_size)/2),-((h_padded*pixel_size)/2)); - for (int i=0;i<w_padded;i++){ - for (int j=0;j<h_padded;j++){ - double R=((double)in.rgb.data[3*(w_padded*j + i) + 0])/255.0; - double G=((double)in.rgb.data[3*(w_padded*j + i) + 1])/255.0; - double B=((double)in.rgb.data[3*(w_padded*j + i) + 2])/255.0; - cairo_set_source_rgb(cr, R,G,B); - cairo_rectangle(cr,i*pixel_size,j*pixel_size,pixel_size,pixel_size); - cairo_fill(cr); + if (vpix<(double)frame.h){ + Image in=*(in1); + in.crop(w_padded*pixel_size,h_padded*pixel_size); + in.resize(w_padded,h_padded); + cairo_translate(cr,-((w_padded*pixel_size)/2),-((h_padded*pixel_size)/2)); + for (int i=0;i<w_padded;i++){ + for (int j=0;j<h_padded;j++){ + double R=((double)in.rgb.data[3*(w_padded*j + i) + 0])/255.0; + double G=((double)in.rgb.data[3*(w_padded*j + i) + 1])/255.0; + double B=((double)in.rgb.data[3*(w_padded*j + i) + 2])/255.0; + cairo_set_source_rgb(cr, R,G,B); + cairo_rectangle(cr,i*pixel_size,j*pixel_size,pixel_size,pixel_size); + cairo_fill(cr); + } } } + else image=*in1; } } private: |
