• Skip to content
  • Skip to link menu
KDE 4.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

digikam

lcmsprf.h

Go to the documentation of this file.
00001 /*
00002 Little cms - profiler construction set
00003 Copyright (C) 1998-2001 Marti Maria <marti@littlecms.com>
00004 
00005 THIS SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
00006 EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
00007 WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
00008 
00009 IN NO EVENT SHALL MARTI MARIA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
00010 INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
00011 OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
00012 WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
00013 LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
00014 OF THIS SOFTWARE.
00015 
00016 This file is free software; you can redistribute it and/or modify it
00017 under the terms of the GNU General Public License as published by
00018 the Free Software Foundation; either version 2 of the License, or
00019 (at your option) any later version.
00020 
00021 This program is distributed in the hope that it will be useful, but
00022 WITHOUT ANY WARRANTY; without even the implied warranty of
00023 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00024 General Public License for more details.
00025 
00026 You should have received a copy of the GNU General Public License
00027 along with this program; if not, write to the Free Software
00028 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00029 
00030 As a special exception to the GNU General Public License, if you
00031 distribute this file as part of a program that contains a
00032 configuration script generated by Autoconf, you may include it under
00033 the same distribution terms that you use for the rest of that program.
00034 */
00035 
00036 /* Version 1.09a */
00037 
00038 #ifndef __cmsprf_H
00039 
00040 // liblcms includes.
00041 
00042 #include <lcms.h>
00043 
00044 // C++ includes.
00045 
00046 #include <cctype>
00047 #include <climits>
00048 #include <cstdarg>
00049 
00050 // C Ansi includes.
00051 
00052 #include <sys/stat.h>
00053 
00054 #ifdef __cplusplus
00055 extern "C"
00056 {
00057 #endif
00058 
00059 #ifdef NON_WINDOWS
00060 #  ifndef stricmp
00061 #     define stricmp strcasecmp
00062 #  endif
00063 #endif
00064 
00065 #ifndef max
00066 #define max(a,b) ((a) > (b)?(a):(b))
00067 #endif
00068 
00069 // See B.K.O #148930: compile with lcms v.1.17
00070 #if (LCMS_VERSION > 116)
00071 typedef LCMSBOOL BOOL;
00072 #endif
00073 
00074 
00075 /* Matrix operations - arbitrary size ----------------------------------------------------- */
00076 
00077 typedef struct
00078 {
00079 
00080     int       Cols, Rows;
00081     double**  Values;
00082 
00083 } MATN,FAR* LPMATN;
00084 
00085 LPMATN      cdecl MATNalloc(int Rows, int Cols);
00086 void        cdecl MATNfree (LPMATN mat);
00087 LPMATN      cdecl MATNmult(LPMATN a1, LPMATN a2);
00088 double      cdecl MATNcross(LPMATN a);
00089 void        cdecl MATNscalar (LPMATN a, double scl, LPMATN b);
00090 LPMATN      cdecl MATNtranspose (LPMATN a);
00091 BOOL        cdecl MATNsolve(LPMATN a, LPMATN b);
00092 
00093 
00094 /* IT8.7 / CGATS.17-200x handling -------------------------------------------------------- */
00095 
00096 #define cmsxIT8_ROWS                    12
00097 #define cmsxIT8_COLS                    22
00098 #define cmsxIT8_GRAYCOLS                24
00099 #define cmsxIT8_NORMAL_PATCHES          (cmsxIT8_ROWS*cmsxIT8_COLS + cmsxIT8_GRAYCOLS)
00100 #define cmsxIT8_CUSTOM_PATCHES          10
00101 #define cmsxIT8_TOTAL_PATCHES           (cmsxIT8_NORMAL_PATCHES + cmsxIT8_CUSTOM_PATCHES)
00102 
00103 
00104 LCMSHANDLE  cdecl cmsxIT8Alloc(void);
00105 void        cdecl cmsxIT8Free(LCMSHANDLE cmsxIT8);
00106 LCMSHANDLE  cdecl cmsxIT8LoadFromFile(const char* cFileName);
00107 LCMSHANDLE  cdecl cmsxIT8LoadFromMem(void *Ptr, size_t len);
00108 BOOL        cdecl cmsxIT8SaveToFile(LCMSHANDLE cmsxIT8, const char* cFileName);
00109 const char* cdecl cmsxIT8GetSheetType(LCMSHANDLE hIT8);
00110 BOOL        cdecl cmsxIT8SetSheetType(LCMSHANDLE hIT8, const char* Type);
00111 const char* cdecl cmsxIT8GetPatchName(LCMSHANDLE hIT8, int nPatch, char* buffer);
00112 BOOL        cdecl cmsxIT8SetProperty(LCMSHANDLE hcmsxIT8, const char* cProp, const char *Str);
00113 BOOL        cdecl cmsxIT8SetPropertyDbl(LCMSHANDLE hcmsxIT8, const char* cProp, double Val);
00114 const char* cdecl cmsxIT8GetProperty(LCMSHANDLE hcmsxIT8, const char* cProp);
00115 double      cdecl cmsxIT8GetPropertyDbl(LCMSHANDLE hcmsxIT8, const char* cProp);
00116 int         cdecl cmsxIT8EnumProperties(LCMSHANDLE cmsxIT8, char ***PropertyNames);
00117 int         cdecl cmsxIT8EnumDataFormat(LCMSHANDLE cmsxIT8, char ***SampleNames);
00118 BOOL        cdecl cmsxIT8SetDataFormat(LCMSHANDLE cmsxIT8, int n, const char *Sample);
00119 BOOL        cdecl cmsxIT8GetDataSetByPos(LCMSHANDLE IT8, int col, int row, char* Val, int ValBufferLen);
00120 BOOL        cdecl cmsxIT8GetDataSet(LCMSHANDLE cmsxIT8, const char* cPatch, const char* cSample, char* Val, int ValBuffLen);
00121 BOOL        cdecl cmsxIT8GetDataSetDbl(LCMSHANDLE cmsxIT8, const char* cPatch, const char* cSample, double* v);
00122 BOOL        cdecl cmsxIT8SetDataSet(LCMSHANDLE cmsxIT8, const char* cPatch, const char* cSample, char *Val);
00123 BOOL        cdecl cmsxIT8SetDataSetDbl(LCMSHANDLE cmsxIT8, const char* cPatch, const char* cSample, double Val);
00124 const char *cdecl cmsxIT8GenericPatchName(int nPatch, char* buffer);
00125 
00126 
00127 /* Patch collections (measurement lists) -------------------------------------------------- */
00128 
00129 #define PATCH_HAS_Lab         0x00000001
00130 #define PATCH_HAS_XYZ         0x00000002
00131 #define PATCH_HAS_RGB         0x00000004
00132 #define PATCH_HAS_CMY         0x00000008
00133 #define PATCH_HAS_CMYK        0x00000010
00134 #define PATCH_HAS_HEXACRM     0x00000020
00135 #define PATCH_HAS_STD_Lab     0x00010000
00136 #define PATCH_HAS_STD_XYZ     0x00020000
00137 #define PATCH_HAS_XYZ_PROOF   0x00100000
00138 #define PATCH_HAS_MEAN_DE     0x01000000
00139 #define PATCH_HAS_STD_DE      0x02000000
00140 #define PATCH_HAS_CHISQ       0x04000000
00141 
00142 
00143 #define MAXPATCHNAMELEN       20
00144 
00145 /* A patch in memory */
00146 
00147 typedef struct
00148             {
00149 
00150                 DWORD        dwFlags;   /* Is quite possible to have colorant in only */
00151                                         /* some patches of sheet, so mark each entry with */
00152                                         /* the values it has. */
00153 
00154                 char Name[MAXPATCHNAMELEN];
00155 
00156                 cmsCIELab Lab;          /* The tristimulus values of target */
00157                 cmsCIEXYZ XYZ;
00158 
00159                 cmsCIEXYZ XYZProof;     /* The absolute XYZ value returned by profile */
00160                                         /* (gamut constrained to device) */
00161 
00162                 union {                 /* The possible colorants. Only one space is */
00163                                         /* allowed...obviously only one set of */
00164                                         /* device-dependent values per patch does make sense. */
00165                         double RGB[3];
00166                         double CMY[3];
00167                         double CMYK[4];
00168                         double Hexa[MAXCHANNELS];
00169 
00170                         } Colorant;
00171 
00172                 double dEStd;               /* Standard deviation  */
00173                 double ChiSq;               /* Chi-square parameter (mean of STD of colorants) */
00174                 double dEMean;              /* Mean dE */
00175 
00176            } PATCH, FAR* LPPATCH;
00177 
00178 
00179 
00180 /* A set of patches is simply an array of bools, TRUE if the patch */
00181 /* belong to the set, false otherwise. */
00182 
00183 typedef BOOL* SETOFPATCHES;
00184 
00185 /* This struct holds whole Patches collection */
00186 
00187 typedef struct _measurement
00188            {
00189 
00190            int          nPatches;
00191            LPPATCH      Patches;
00192            SETOFPATCHES Allowed;
00193 
00194            } MEASUREMENT,FAR *LPMEASUREMENT;
00195 
00196 
00197 void         cdecl cmsxPCollFreeMeasurements(LPMEASUREMENT m);
00198 SETOFPATCHES cdecl cmsxPCollBuildSet(LPMEASUREMENT m, BOOL lDefault);
00199 
00200 BOOL         cdecl cmsxPCollBuildMeasurement(LPMEASUREMENT m, const char *ReferenceSheet,
00201                                              const char *MeasurementSheet, DWORD dwNeededSamplesType);
00202 
00203 int          cdecl cmsxPCollCountSet(LPMEASUREMENT m, SETOFPATCHES Set);
00204 BOOL         cdecl cmsxPCollValidatePatches(LPMEASUREMENT m, DWORD dwFlags);
00205 
00206 BOOL         cdecl cmsxPCollLoadFromSheet(LPMEASUREMENT m, LCMSHANDLE hSheet);
00207 BOOL         cdecl cmsxPCollSaveToSheet(LPMEASUREMENT m, LCMSHANDLE it8);
00208 
00209 LPPATCH      cdecl cmsxPCollGetPatch(LPMEASUREMENT m, int n);
00210 LPPATCH      cdecl cmsxPCollGetPatchByName(LPMEASUREMENT m, const char* Name, int* lpPos);
00211 LPPATCH      cdecl cmsxPCollGetPatchByPos(LPMEASUREMENT m, int row, int col);
00212 LPPATCH      cdecl cmsxPCollAddPatchRGB(LPMEASUREMENT m, const char *Name,
00213                                         double r, double g, double b,
00214                                         LPcmsCIEXYZ XYZ, LPcmsCIELab Lab);
00215 
00216 void         cdecl cmsxPCollLinearizePatches(LPMEASUREMENT m, SETOFPATCHES Valids, LPGAMMATABLE Gamma[3]);
00217 
00218 /* Extraction utilities */
00219 
00220 /* Collect "need" patches of the specific kind, return the number of collected (that */
00221 /* could be less if set of patches is exhausted) */
00222 
00223 void         cdecl cmsxPCollPatchesGS(LPMEASUREMENT m, SETOFPATCHES Result);
00224 
00225 int          cdecl cmsxPCollPatchesNearRGB(LPMEASUREMENT m, SETOFPATCHES Valids,
00226                                             double r, double g, double b, int need, SETOFPATCHES Result);
00227 
00228 int          cdecl cmsxPCollPatchesNearNeutral(LPMEASUREMENT m, SETOFPATCHES Valids,
00229                                             int need, SETOFPATCHES Result);
00230 
00231 int          cdecl cmsxPCollPatchesNearPrimary(LPMEASUREMENT m, SETOFPATCHES Valids,
00232                                            int nChannel, int need, SETOFPATCHES Result);
00233 
00234 int          cdecl cmsxPCollPatchesInLabCube(LPMEASUREMENT m, SETOFPATCHES Valids, 
00235                                            double Lmin, double LMax, double a, double b, SETOFPATCHES Result);
00236 
00237 int          cdecl cmsxPCollPatchesInGamutLUT(LPMEASUREMENT m, SETOFPATCHES Valids, 
00238                                               LPLUT Gamut, SETOFPATCHES Result);
00239 
00240 /* Find important values */
00241 
00242 LPPATCH      cdecl cmsxPCollFindWhite(LPMEASUREMENT m, SETOFPATCHES Valids, double* Distance);
00243 LPPATCH      cdecl cmsxPCollFindBlack(LPMEASUREMENT m, SETOFPATCHES Valids, double* Distance);
00244 LPPATCH      cdecl cmsxPCollFindPrimary(LPMEASUREMENT m, SETOFPATCHES Valids, int Channel, double* Distance);
00245 
00246 /* Multiple linear regression stuff ---------------------------------------- */
00247 
00248 
00249 /* A measurement of error */
00250 
00251 typedef struct
00252     {
00253 
00254         double SSE;             /* The error sum of squares */
00255         double MSE;             /* The error mean sum of squares */
00256         double SSR;             /* The regression sum of squares */
00257         double MSR;             /* The regression mean sum of squares */
00258         double SSTO;            /* Total sum of squares */
00259         double F;               /* The Fisher-F value (MSR / MSE) */
00260         double R2;              /* Proportion of variability explained by the regression */
00261                                 /* (root is Pearson correlation coefficient) */
00262 
00263         double R2adj;           /* The adjusted coefficient of multiple determination. */
00264                                 /* R2-adjusted or R2adj. This is calculated as */
00265                                 /* R2adj = 1 - (1-R2)(N-n-1)/(N-1) */
00266                                 /* and used as multiple correlation coefficient */
00267                                 /* (really, it should be square root) */
00268 
00269     } MLRSTATISTICS, FAR* LPMLRSTATISTICS;
00270 
00271 
00272 int  cdecl cmsxRegressionCreateMatrix(LPMEASUREMENT m, SETOFPATCHES Allowed, int nterms,
00273                                        int ColorSpace,
00274                                        LPMATN* lpMat, LPMLRSTATISTICS Stat);
00275 
00276 BOOL cdecl cmsxRegressionRGB2Lab(double r, double g, double b,
00277                                        LPMATN tfm, LPcmsCIELab Lab);
00278 
00279 BOOL cdecl cmsxRegressionRGB2XYZ(double r, double g, double b,
00280                                        LPMATN tfm, LPcmsCIEXYZ XYZ);
00281 
00282 BOOL cdecl cmsxRegressionInterpolatorRGB(LPMEASUREMENT m,
00283                                        int ColorSpace,
00284                                        int    RegressionTerms,
00285                                        BOOL   lUseLocalPatches,
00286                                        int    MinPatchesToCollect,
00287                                        double r, double g, double b,
00288                                        void* Res);
00289 
00290 
00291 /* Levenberg-Marquardt ---------------------------------------------------------------------- */
00292 
00293 LCMSHANDLE cdecl cmsxLevenbergMarquardtInit(LPSAMPLEDCURVE x, LPSAMPLEDCURVE y, double sig,
00294                                             double a[], int ma,
00295                                             void (*funcs)(double, double[], double*, double[], int));
00296 
00297 double    cdecl cmsxLevenbergMarquardtAlamda(LCMSHANDLE hMRQ);
00298 double    cdecl cmsxLevenbergMarquardtChiSq(LCMSHANDLE hMRQ);
00299 BOOL      cdecl cmsxLevenbergMarquardtIterate(LCMSHANDLE hMRQ);
00300 BOOL      cdecl cmsxLevenbergMarquardtFree(LCMSHANDLE hMRQ);
00301 
00302 
00303 /* Convex hull geometric routines ------------------------------------------------------------ */
00304 
00305 LCMSHANDLE cdecl cmsxHullInit(void);
00306 void       cdecl cmsxHullDone(LCMSHANDLE hHull);
00307 BOOL       cdecl cmsxHullAddPoint(LCMSHANDLE hHull, int x, int y, int z);
00308 BOOL       cdecl cmsxHullComputeHull(LCMSHANDLE hHull);
00309 char       cdecl cmsxHullCheckpoint(LCMSHANDLE hHull, int x, int y, int z);
00310 BOOL       cdecl cmsxHullDumpVRML(LCMSHANDLE hHull, const char* fname);
00311 
00312 
00313 /* Linearization ---------------------------------------------------------------------------- */
00314 
00315 
00316 #define MEDIUM_REFLECTIVE_D50    0    /* Used for scanner targets */
00317 #define MEDIUM_TRANSMISSIVE      1    /* Used for monitors & projectors */
00318 
00319 void cdecl cmsxComputeLinearizationTables(LPMEASUREMENT m, int ColorSpace, 
00320                                     LPGAMMATABLE Lin[3], int nResultingPoints, int Medium);
00321 
00322 void         cdecl cmsxCompleteLabOfPatches(LPMEASUREMENT m, SETOFPATCHES Valids, int Medium);
00323 LPGAMMATABLE cdecl cmsxEstimateGamma(LPSAMPLEDCURVE X, LPSAMPLEDCURVE Y, int nResultingPoints);
00324 
00325 void cdecl cmsxApplyLinearizationTable(double In[3], LPGAMMATABLE Gamma[3], double Out[3]);
00326 void cdecl cmsxApplyLinearizationGamma(WORD In[3], LPGAMMATABLE Gamma[3], WORD Out[3]);
00327 
00328 /* Support routines ---------------------------------------------------------------------- */
00329 
00330 double cdecl _cmsxSaturate65535To255(double d);
00331 double cdecl _cmsxSaturate255To65535(double d);
00332 void   cdecl _cmsxClampXYZ100(LPcmsCIEXYZ xyz);
00333 
00334 /* Matrix shaper profiler API ------------------------------------------------------------- */
00335 
00336 
00337 BOOL cdecl cmsxComputeMatrixShaper(const char* ReferenceSheet,
00338                                    const char* MeasurementSheet,
00339                                    int Medium,
00340                                    LPGAMMATABLE TransferCurves[3],
00341                                    LPcmsCIEXYZ WhitePoint,
00342                                    LPcmsCIEXYZ BlackPoint,
00343                                    LPcmsCIExyYTRIPLE Primaries);
00344 
00345 
00346 /* Common to all profilers ------------------------------------------------------------------- */
00347 
00348 #define MAX_STR 256
00349 
00350 typedef int (* cmsxGAUGER)(const char *Label, int nMin, int nMax, int Pos);
00351 typedef int (* cmsxPRINTF)(const char *Frm, ...);
00352 
00353 typedef struct
00354     {
00355 
00356            /* Files */
00357            char ReferenceSheet[MAX_PATH];
00358            char MeasurementSheet[MAX_PATH];
00359            char OutputProfileFile[MAX_PATH];
00360 
00361            /* Some infos            */
00362            char Description[MAX_STR];
00363            char Manufacturer[MAX_STR];
00364            char Model[MAX_STR];
00365            char Copyright[MAX_STR];
00366 
00367            /* Callbacks */
00368            cmsxGAUGER Gauger;
00369            cmsxPRINTF printf;
00370 
00371            /* EndPoints */
00372            cmsCIEXYZ WhitePoint;            /* Black point in 0.xxx notation */
00373            cmsCIEXYZ BlackPoint;            /* Black point in 0.xxx notation */
00374            cmsCIExyYTRIPLE Primaries;       /* The primaries */
00375            LPGAMMATABLE Gamma[3];           /* Gamma curves */
00376 
00377            /* Profile */
00378            cmsHPROFILE hProfile;            /* handle to profile */
00379 
00380            icProfileClassSignature DeviceClass;
00381            icColorSpaceSignature   ColorSpace;
00382 
00383            int PCSType;                    /* PT_XYZ or PT_Lab */
00384            int CLUTPoints;                 /* Final CLUT resolution */
00385            int ProfileVerbosityLevel;       /* 0=minimum, 1=additional, 2=Verbose, 3=Any suitable */
00386 
00387 
00388            /* Measurement */
00389            MEASUREMENT m;                /* Contains list of available patches */
00390            int Medium;
00391 
00392 
00393            /* RGB Gamut hull */
00394            LCMSHANDLE hRGBHull;   /* Contains bobbin of valid RGB values */
00395 
00396            /* CIECAM97s */
00397            BOOL lUseCIECAM97s;   /* Use CIECAM97s for chromatic adaptation? */
00398 
00399            cmsViewingConditions device;     /* Viewing condition of source */
00400            cmsViewingConditions PCS;        /* Viewing condition of PCS */
00401 
00402            LCMSHANDLE hDevice;              /* CIECAM97s models used for adaptation */
00403            LCMSHANDLE hPCS;                 /* and viewing conditions */
00404 
00405     } PROFILERCOMMONDATA,FAR* LPPROFILERCOMMONDATA;
00406 
00407 
00408 /* Shared routines */
00409 
00410 BOOL cdecl cmsxEmbedCharTarget(LPPROFILERCOMMONDATA hdr);
00411 BOOL cdecl cmsxEmbedMatrixShaper(LPPROFILERCOMMONDATA hdr);
00412 BOOL cdecl cmsxEmbedTextualInfo(LPPROFILERCOMMONDATA hdr);
00413 
00414 int  cdecl cmsxFindOptimumNumOfTerms(LPPROFILERCOMMONDATA hdr, int nMaxTerms, BOOL* lAllOk);
00415 void cdecl cmsxChromaticAdaptationAndNormalization(LPPROFILERCOMMONDATA hdr, LPcmsCIEXYZ xyz, BOOL lReverse);
00416 void cdecl cmsxInitPCSViewingConditions(LPPROFILERCOMMONDATA hdr);
00417 void cdecl cmsxComputeGamutHull(LPPROFILERCOMMONDATA hdr);
00418 BOOL cdecl cmsxChoosePCS(LPPROFILERCOMMONDATA hdr);
00419 
00420 /* Monitor profiler API ------------------------------------------------------------------- */
00421 
00422 typedef struct
00423            {
00424 
00425            PROFILERCOMMONDATA hdr;
00426 
00427            LPGAMMATABLE         Prelinearization[3];    /* Canonic gamma */
00428            LPGAMMATABLE         ReverseTables[3];       /* Reverse (direct) gamma */
00429            LPGAMMATABLE         PreLab[3];
00430            LPGAMMATABLE         PreLabRev[3];
00431 
00432            MAT3                 PrimariesMatrix;
00433            MAT3                 PrimariesMatrixRev; 
00434 
00435            } MONITORPROFILERDATA,FAR* LPMONITORPROFILERDATA;
00436 
00437 
00438 
00439 BOOL   cdecl cmsxMonitorProfilerInit(LPMONITORPROFILERDATA sys);
00440 BOOL   cdecl cmsxMonitorProfilerDo(LPMONITORPROFILERDATA sys);
00441 
00442 
00443 /* Scanner profiler API ------------------------------------------------------------------- */
00444 
00445 
00446 typedef struct
00447            {
00448 
00449            PROFILERCOMMONDATA hdr;
00450 
00451            LPGAMMATABLE Prelinearization[3];
00452 
00453            LPMATN HiTerms;      /* Regression matrix of many terms */
00454            LPMATN LoTerms;      /* Low order regression matrix used for extrapolation */
00455 
00456            BOOL   lLocalConvergenceExtrapolation;
00457 
00458 
00459            } SCANNERPROFILERDATA,FAR* LPSCANNERPROFILERDATA;
00460 
00461 
00462 BOOL   cdecl cmsxScannerProfilerInit(LPSCANNERPROFILERDATA sys);                                       
00463 BOOL   cdecl cmsxScannerProfilerDo(LPSCANNERPROFILERDATA sys);
00464 
00465 /* ----------------------------------------------------------- end of profilers */
00466 
00467 
00468 #ifdef __cplusplus
00469 }
00470 #endif
00471 
00472 #define __cmsprf_H
00473 #endif

digikam

Skip menu "digikam"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • digikam
Generated for API Reference by doxygen 1.5.9-20090814
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal