Main Page | Data Structures | Directories | File List | Data Fields | Globals

Sadie_Multi.c

Go to the documentation of this file.
00001 
00013 /* This file is part of tclSadie.
00014 
00015    tclSadie is free software; you can redistribute it and/or modify it
00016    under the terms of the GNU General Public License as published by
00017    the Free Software Foundation; either version 2 of the License, or
00018    (at your option) any later version.
00019 
00020    tclSadie is distributed in the hope that it will be useful, but
00021    WITHOUT ANY WARRANTY; without even the implied warranty of
00022    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00023    General Public License for more details.
00024 
00025    You should have received a copy of the GNU General Public License
00026    along with tclSadie; if not, write to the Free Software Foundation,
00027    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.  */
00028 
00029 #if HAVE_CONFIG_H
00030 #include <config.h>
00031 #endif /* HAVE_CONFIG_H */
00032 #include <tcl.h>
00033 #include <tk.h>
00034 #include <stdio.h>
00035 #include <string.h>
00036 #include <sadie.h>
00037 #include "tclsadie.h"
00038 
00043 static const char atitle[] = DEFAULT_TCL_ARRAY_TITLE;
00044 static const char ixaddr[] = DEFAULT_IN_IMAGE_ADDR_INDEX;
00045 static const char ixname[] = DEFAULT_OUT_IMAGE_NAME_INDEX;
00077 int
00078 Sadie_Multi_CombineCmd (ClientData client_data, Tcl_Interp *interp,
00079                         int objc, Tcl_Obj * const objv[])
00080 {
00081   IMAGE *inimg1 = NULL;
00082   IMAGE *inimg2 = NULL;
00083   IMAGE *outimg = NULL;
00084   int option;
00085   double weight1, weight2;
00086 
00087   if (objc != 2)
00088     {
00089       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00090       return TCL_ERROR;
00091     }
00092   if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", &inimg1)
00093        != TCL_OK)
00094       || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", &inimg2)
00095           != TCL_OK)
00096       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00097           != TCL_OK)
00098       || (GetSadieDoubleFromObj2 (interp, objv[1], "weight1", &weight1)
00099           != TCL_OK)
00100       || (GetSadieDoubleFromObj2 (interp, objv[1], "weight2", &weight2)
00101           != TCL_OK))
00102     return TCL_ERROR;
00103   COMBINE (inimg1, inimg2, (short)option, weight1, weight2, &outimg);
00104   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00105 }
00106 
00136 int
00137 Sadie_Multi_CompareCmd (ClientData client_data, Tcl_Interp *interp,
00138                         int objc, Tcl_Obj * const objv[])
00139 {
00140   IMAGE *inimg1 = NULL;
00141   IMAGE *inimg2 = NULL;
00142   IMAGE *outimg = NULL;
00143   int option;
00144 
00145   if (objc != 2)
00146     {
00147       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00148       return TCL_ERROR;
00149     }
00150   if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", &inimg1)
00151        != TCL_OK)
00152       || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", &inimg2)
00153           != TCL_OK)
00154       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00155           != TCL_OK))
00156     return TCL_ERROR;
00157   COMPARE (inimg1, inimg2, (short)option, &outimg);
00158   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00159 }
00160 
00183 int
00184 Sadie_Multi_PCTCmd (ClientData client_data, Tcl_Interp *interp,
00185                     int objc, Tcl_Obj * const objv[])
00186 {
00187   IMAGE *inimg = NULL;
00188   IMAGE *outimg = NULL;
00189   uint32_t incr;
00190 
00191   if (objc != 2)
00192     {
00193       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00194       return TCL_ERROR;
00195     }
00196   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00197        != TCL_OK)
00198       || (GetSadieUintFromObj2 (interp, objv[1], "incr", &incr)
00199           != TCL_OK))
00200     return TCL_ERROR;
00201   PCT (inimg, incr, &outimg);
00202   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00203 }
00204 
00223 int
00224 Sadie_Multi_PCSCmd (ClientData client_data, Tcl_Interp *interp,
00225                     int objc, Tcl_Obj * const objv[])
00226 {
00227   IMAGE *inimg = NULL;
00228   IMAGE *outimg = NULL;
00229   uint32_t incr;
00230 
00231   if (objc != 2)
00232     {
00233       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00234       return TCL_ERROR;
00235     }
00236   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00237        != TCL_OK)
00238       || (GetSadieUintFromObj2 (interp, objv[1], "incr", &incr)
00239           != TCL_OK))
00240     return TCL_ERROR;
00241   DECORSTR (inimg, incr, &outimg);
00242   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00243 }
00244 
00262 int
00263 Sadie_Multi_RGB2HSVCmd (ClientData client_data, Tcl_Interp *interp,
00264                         int objc, Tcl_Obj * const objv[])
00265 {
00266   IMAGE *inimg = NULL;
00267   IMAGE *outimg = NULL;
00268 
00269   if (objc != 2)
00270     {
00271       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00272       return TCL_ERROR;
00273     }
00274   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00275        != TCL_OK))
00276     return TCL_ERROR;
00277   RGBTOHSV (inimg, &outimg);
00278   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00279 }
00280 
00298 int
00299 Sadie_Multi_HSV2RGBCmd (ClientData client_data, Tcl_Interp *interp,
00300                         int objc, Tcl_Obj * const objv[])
00301 {
00302   IMAGE *inimg = NULL;
00303   IMAGE *outimg = NULL;
00304 
00305   if (objc != 2)
00306     {
00307       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00308       return TCL_ERROR;
00309     }
00310   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00311        != TCL_OK))
00312     return TCL_ERROR;
00313   HSVTORGB (inimg, &outimg);
00314   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00315 }
00316 
00334 int
00335 Sadie_Multi_BIL2BSQCmd (ClientData client_data, Tcl_Interp *interp,
00336                         int objc, Tcl_Obj * const objv[])
00337 {
00338   IMAGE *inimg = NULL;
00339   IMAGE **outband = NULL;
00340   Tcl_Obj **bandobj = NULL;
00341   size_t i, a;
00342   char imagename[SLEN];
00343   int err = TCL_OK;
00344 
00345   if (objc != 2)
00346     {
00347       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00348       return TCL_ERROR;
00349     }
00350   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00351        != TCL_OK))
00352     return TCL_ERROR;
00353   outband = calloc (inimg->nbnd, sizeof (IMAGE *));
00354   if (outband == NULL)
00355     return TCL_ERROR;
00356   bandobj = calloc (inimg->nbnd, sizeof (Tcl_Obj *));
00357   if (bandobj == NULL)
00358     {
00359       free (outband);
00360       return TCL_ERROR;
00361     }
00362   BILTOBSQ (inimg, outband);
00363   for (i = 0; ((err == TCL_OK) && (i < inimg->nbnd)); i++)
00364     {
00365       snprintf (imagename, SLEN - 1, "outname%lu",
00366                 (long unsigned int) (i + 1));
00367       bandobj[i] = NewSadieImageObj2 (interp, objv[1], (const char *)imagename,
00368                                       outband[i]);
00369       if (bandobj[i] != NULL)
00370         Tcl_IncrRefCount (bandobj[i]);
00371       else
00372         err = TCL_ERROR;
00373     }
00374   if (err == TCL_OK)
00375     Tcl_SetObjResult (interp, Tcl_NewListObj (inimg->nbnd, bandobj));
00376   for (a = 0; a < inimg->nbnd; a++)
00377     Tcl_DecrRefCount (bandobj[a]);
00378   free (bandobj);
00379   free (outband);
00380   return err;
00381 }
00382 
00400 int
00401 Sadie_Multi_BSQ2BILCmd (ClientData client_data, Tcl_Interp *interp,
00402                         int objc, Tcl_Obj * const objv[])
00403 {
00404   IMAGE *inband[3] = { NULL, NULL, NULL };
00405   IMAGE *outimg = NULL;
00406 
00407   if (objc != 2)
00408     {
00409       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00410       return TCL_ERROR;
00411     }
00412   if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", inband)
00413        != TCL_OK)
00414       || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", inband + 1)
00415           != TCL_OK)
00416       || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr3", inband + 2)
00417           != TCL_OK))
00418     return TCL_ERROR;
00419   BSQTOBIL (inband, 3, &outimg);
00420   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00421 }
00422 
00424 static const char *comp_label_index[2] = { "outname1", "outname2" };
00425 
00446 int
00447 Sadie_Multi_Comp2RealCmd (ClientData client_data, Tcl_Interp *interp,
00448                           int objc, Tcl_Obj * const objv[])
00449 {
00450   IMAGE *inimg = NULL;
00451   IMAGE *comp_img[2] = { NULL, NULL };
00452   int option;
00453 
00454   if (objc != 2)
00455     {
00456       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00457       return TCL_ERROR;
00458     }
00459   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00460        != TCL_OK)
00461       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00462           != TCL_OK))
00463     return TCL_ERROR;
00464   COM2REAL (inimg, (short)option, comp_img, comp_img + 1);
00465   return SetSadieComponentObj2 (interp, objv[1], comp_label_index, comp_img);
00466 }
00467 
00488 int
00489 Sadie_Multi_Real2CompCmd (ClientData client_data, Tcl_Interp *interp,
00490                           int objc, Tcl_Obj * const objv[])
00491 {
00492   IMAGE *inimg1 = NULL;
00493   IMAGE *inimg2 = NULL;
00494   IMAGE *outimg = NULL;
00495   int option;
00496 
00497   if (objc != 2)
00498     {
00499       Tcl_WrongNumArgs (interp, 1, objv, atitle);
00500       return TCL_ERROR;
00501     }
00502   if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", &inimg1)
00503        != TCL_OK)
00504       || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", &inimg2)
00505           != TCL_OK)
00506       || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00507           != TCL_OK))
00508     return TCL_ERROR;
00509   REAL2COM (inimg1, inimg2, (short)option, &outimg);
00510   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00511 }
00512 
00541 int
00542 Sadie_Multi_RotateCubeCmd (ClientData client_data, Tcl_Interp *interp,
00543                            int objc, Tcl_Obj * const objv[])
00544 {
00545   IMAGE *inimg = NULL;
00546   IMAGE *outimg = NULL;
00547   int xdir, xaxis;
00548   int ydir, yaxis;
00549   int zdir, zaxis;
00550 
00551   if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00552        != TCL_OK)
00553       || (GetSadieIntFromObj2 (interp, objv[1], "x,sign", &xdir)
00554           != TCL_OK)
00555       || (GetSadieIntFromObj2 (interp, objv[1], "y,sign", &ydir)
00556           != TCL_OK)
00557       || (GetSadieIntFromObj2 (interp, objv[1], "z,sign", &zdir)
00558           != TCL_OK)
00559       || (GetSadieIntFromObj2 (interp, objv[1], "x,cubedim", &xaxis)
00560           != TCL_OK)
00561       || (GetSadieIntFromObj2 (interp, objv[1], "y,cubedim", &yaxis)
00562           != TCL_OK)
00563       || (GetSadieIntFromObj2 (interp, objv[1], "z,cubedim", &zaxis)
00564           != TCL_OK))
00565     return TCL_ERROR;
00566   ROTATECUBE (inimg, (short)xdir, (short)ydir, (short)zdir,
00567               (short)xaxis, (short)yaxis, (short)zaxis, &outimg);
00568   return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00569 }
00570 
00577 int
00578 Sadie_Multi_Init (Tcl_Interp *interp)
00579 {
00580   Tcl_CreateObjCommand (interp, "Sadie_Multi_Combine",
00581                         Sadie_Multi_CombineCmd, NULL, NULL);
00582   Tcl_CreateObjCommand (interp, "Sadie_Multi_Compare",
00583                         Sadie_Multi_CompareCmd, NULL, NULL);
00584   Tcl_CreateObjCommand (interp, "Sadie_Multi_PCT",
00585                         Sadie_Multi_PCTCmd, NULL, NULL);
00586   Tcl_CreateObjCommand (interp, "Sadie_Multi_PCS",
00587                         Sadie_Multi_PCSCmd, NULL, NULL);
00588   Tcl_CreateObjCommand (interp, "Sadie_Multi_RGB2HSV",
00589                         Sadie_Multi_RGB2HSVCmd, NULL, NULL);
00590   Tcl_CreateObjCommand (interp, "Sadie_Multi_HSV2RGB",
00591                         Sadie_Multi_HSV2RGBCmd, NULL, NULL);
00592   Tcl_CreateObjCommand (interp, "Sadie_Multi_BIL2BSQ",
00593                         Sadie_Multi_BIL2BSQCmd, NULL, NULL);
00594   Tcl_CreateObjCommand (interp, "Sadie_Multi_BSQ2BIL",
00595                         Sadie_Multi_BSQ2BILCmd, NULL, NULL);
00596   Tcl_CreateObjCommand (interp, "Sadie_Multi_Comp2Real",
00597                         Sadie_Multi_Comp2RealCmd, NULL, NULL);
00598   Tcl_CreateObjCommand (interp, "Sadie_Multi_Real2Comp",
00599                         Sadie_Multi_Real2CompCmd, NULL, NULL);
00600   Tcl_CreateObjCommand (interp, "Sadie_Multi_RotateCube",
00601                         Sadie_Multi_RotateCubeCmd, NULL, NULL);
00602   return TCL_OK;
00603 }
00604 

Generated on Fri Jul 8 14:55:01 2005 for tclSadie by  doxygen 1.4.2