value ml_gtk_curve_get_vector (value curve, value vlen) { int i, len = Int_val(vlen); gfloat* vect = g_malloc(len * sizeof(gfloat)); value ret; gtk_curve_get_vector(GtkCurve_val(curve), len, vect); ret = caml_alloc(len*Double_wosize, Double_array_tag); for (i = 0; i < len; i++) Store_double_field(ret, i, vect[i]); g_free(vect); return ret; }
void read ( void) { uint32_t g; gfloat sample[256]; gtk_curve_get_vector(GTK_CURVE(WID(curve1)),256,sample); for(int i=0;i<256;i++) { if(sample[i]<0) g=0; else if(sample[i]>255) g=255; else g=(uint32_t)sample[i]; scaler[i]=g; // printf("%u %u\n",i,scaler[i]); } }
/* Returns a vector of points representing the curve. */ int clip_GTK_CURVEGETVECTOR(ClipMachine * cm) { C_widget *ccur = _fetch_cw_arg(cm); int veclen = _clip_parni(cm,2); gfloat* vector = calloc(veclen,sizeof(gfloat)); long n=0, i; ClipVar *a = RETPTR(cm); CHECKCWID(ccur,GTK_CURVE); CHECKARG(2,NUMERIC_t); _clip_array(cm, a, veclen, &n); gtk_curve_get_vector(GTK_CURVE(ccur->widget),veclen,vector); for (i = 0; i < veclen; i++) { a->a.items[i].t.type = NUMERIC_t; a->a.items[i].n.d = vector[i]; } return 0; err: return 1; }
void curve_save (gchar *filename, long int seekpos) { GtkWidget *curve = lookup_widget(app,"curve"); guint count, i; gfloat *vector; gchar *type; FILE *out; gfloat minx, maxx, miny, maxy; gfloat scale, f; guint base; minx = gtk_spin_button_get_value_as_float (lookup_widget(app,"minx")); maxx = gtk_spin_button_get_value_as_float (lookup_widget(app,"maxx")); miny = gtk_spin_button_get_value_as_float (lookup_widget(app,"miny")); maxy = gtk_spin_button_get_value_as_float (lookup_widget(app,"maxy")); scale = gtk_spin_button_get_value_as_float (lookup_widget(app,"scale")); base = gtk_spin_button_get_value_as_int (lookup_widget(app,"base")); count = gtk_spin_button_get_value_as_int (lookup_widget(app,"count")); type = gtk_entry_get_text (lookup_widget(app,"typeentry")); vector = g_new (gfloat,count); gtk_curve_get_vector (curve,count,vector); out = fopen(filename, "wb"); if (out == NULL) return; if (seekpos) fseek (out,seekpos,0); if (strcmp(type,"u_char")==0) { u_char val; f = (gfloat)(scale) / (maxy - miny); for (i=0; i<count; i++) { val = base + (u_char) (vector[i] * f); fwrite(&val,sizeof(val),1,out); } } if (strcmp(type,"char")==0) { char val; f = (gfloat)(scale) / (maxy - miny); for (i=0; i<count; i++) { val = (char) (vector[i] * f); fwrite(&val,sizeof(val),1,out); } } if (strcmp(type,"u_short")==0) { u_short val; f = (gfloat)(scale) / (maxy - miny); for (i=0; i<count; i++) { val = (u_short) (vector[i] * f); fwrite(&val,sizeof(val),1,out); } } if (strcmp(type,"short")==0) { short val; f = (gfloat)(scale) / (maxy - miny); printf ("factor=%f scale=%f (%f)\n",f,scale,maxy-miny); for (i=0; i<count; i++) { val = (short) (vector[i] * f); fwrite(&val,sizeof(val),1,out); } } if (strcmp(type,"u_long")==0) { u_long val; f = (gfloat)(scale) / (maxy - miny); for (i=0; i<count; i++) { val = (u_long) (vector[i] * f); fwrite(&val,sizeof(val),1,out); } } if (strcmp(type,"long")==0) { long val; f = (gfloat)(scale) / (maxy - miny); for (i=0; i<count; i++) { val = (long) (vector[i] * f); fwrite(&val,sizeof(val),1,out); } } if (strcmp(type,"float")==0) { fwrite(vector,sizeof(gfloat),count,out); } if (strcmp(type,"double")==0) { gdouble val; for (i=0; i<count; i++) { val = (gdouble) vector[i]; fwrite(&val,sizeof(val),1,out); } } if (strcmp(type,"fixed (4+12)")==0) { u_short val; f = (gfloat)(scale) / (maxy - miny); for (i=0; i<count; i++) { val = base + (u_char) (vector[i] * f); fwrite(&val,sizeof(val),1,out); } } fclose (out); g_free (vector); }
void get_points_from_curve( GtkWidget *curve, int len, float *vec ) { gtk_curve_get_vector( GTK_CURVE(curve), len, vec ); }