summaryrefslogtreecommitdiff
path: root/rotord
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2014-01-24 10:42:38 +0000
committerTim Redfern <tim@eclectronics.org>2014-01-24 10:42:38 +0000
commit6ef14b732971507794ceda70b8a067b874098b9c (patch)
treec75c88f93bc3f2356d36fd7b2beade450f3a1671 /rotord
parentfea2665479fcc34e4f8c16f8f603af714ea4abc5 (diff)
clamp mosaic pixels
Diffstat (limited to 'rotord')
-rw-r--r--rotord/src/nodes_drawing.h29
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: