本文整理汇总了C++中cmsDoTransform函数的典型用法代码示例。如果您正苦于以下问题:C++ cmsDoTransform函数的具体用法?C++ cmsDoTransform怎么用?C++ cmsDoTransform使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cmsDoTransform函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: cmmMultiprofileSampler
int cmmMultiprofileSampler(WORD In[], WORD Out[], LPVOID Cargo) {
int i;
cmsHTRANSFORM* Transforms = (cmsHTRANSFORM*)Cargo;
// Need to go from In to Out at least once
cmsDoTransform(Transforms[0], In, Out, 1);
for (i=1; Transforms[i]; i++)
cmsDoTransform(Transforms[i], Out, Out, 1);
return TRUE;
}
开发者ID:unitedroad,项目名称:harmony-for-haiku,代码行数:12,代码来源:cmmxforms.c
示例2: BlackPointUsingPerceptualBlack
static
int BlackPointUsingPerceptualBlack(LPcmsCIEXYZ BlackPoint,
cmsHPROFILE hProfile,
DWORD dwFlags)
{
cmsHTRANSFORM hPercLab2CMYK, hRelColCMYK2Lab;
cmsHPROFILE hLab;
cmsCIELab LabIn, LabOut;
WORD CMYK[MAXCHANNELS];
cmsCIEXYZ BlackXYZ, MediaWhite;
if (!cmsIsIntentSupported(hProfile, INTENT_PERCEPTUAL, LCMS_USED_AS_INPUT)) {
BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0;
return 0;
}
hLab = cmsCreateLabProfile(NULL);
hPercLab2CMYK = cmsCreateTransform(hLab, TYPE_Lab_DBL,
hProfile, TYPE_CMYK_16,
INTENT_PERCEPTUAL, cmsFLAGS_NOTPRECALC);
hRelColCMYK2Lab = cmsCreateTransform(hProfile, TYPE_CMYK_16,
hLab, TYPE_Lab_DBL,
INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOTPRECALC);
LabIn.L = LabIn.a = LabIn.b = 0;
cmsDoTransform(hPercLab2CMYK, &LabIn, CMYK, 1);
cmsDoTransform(hRelColCMYK2Lab, CMYK, &LabOut, 1);
if (LabOut.L > 50) LabOut.L = 50;
LabOut.a = LabOut.b = 0;
cmsDeleteTransform(hPercLab2CMYK);
cmsDeleteTransform(hRelColCMYK2Lab);
cmsCloseProfile(hLab);
cmsLab2XYZ(NULL, &BlackXYZ, &LabOut);
if (!(dwFlags & LCMS_BPFLAGS_D50_ADAPTED)){
cmsTakeMediaWhitePoint(&MediaWhite, hProfile);
cmsAdaptToIlluminant(BlackPoint, cmsD50_XYZ(), &MediaWhite, &BlackXYZ);
}
else
*BlackPoint = BlackXYZ;
return 1;
}
开发者ID:makinacorpus,项目名称:libecw,代码行数:52,代码来源:cmswtpnt.c
示例3: Q_ASSERT
void IccColorProfile::calculateFloatUIMinMax(void)
{
QVector<KoChannelInfo::DoubleRange> &ret = d->shared->uiMinMaxes;
cmsHPROFILE cprofile = d->shared->lcmsProfile->lcmsProfile();
Q_ASSERT(cprofile);
cmsColorSpaceSignature color_space_sig = cmsGetColorSpace(cprofile);
unsigned int num_channels = cmsChannelsOf(color_space_sig);
unsigned int color_space_mask = _cmsLCMScolorSpace(color_space_sig);
Q_ASSERT(num_channels>=1 && num_channels <=4); // num_channels==1 is for grayscale, we need to handle it
Q_ASSERT(color_space_mask);
// to try to find the max range of float/doubles for this profile,
// pass in min/max int and make the profile convert that
// this is far from perfect, we need a better way, if possible to get the "bounds" of a profile
uint16_t in_min_pixel[4] = {0,0,0,0};
uint16_t in_max_pixel[4] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
double out_min_pixel[4] = {0,0,0,0};
double out_max_pixel[4] = {0,0,0,0};
cmsHTRANSFORM trans = cmsCreateTransform(
cprofile,
(COLORSPACE_SH(color_space_mask)|CHANNELS_SH(num_channels)|BYTES_SH(2)),
cprofile,
(COLORSPACE_SH(color_space_mask)|FLOAT_SH(1)|CHANNELS_SH(num_channels)|BYTES_SH(0)), //NOTE THAT 'BYTES' FIELD IS SET TO ZERO ON DLB because 8 bytes overflows the bitfield
INTENT_PERCEPTUAL, 0); // does the intent matter in this case?
if (trans) {
cmsDoTransform(trans, in_min_pixel, out_min_pixel, 1);
cmsDoTransform(trans, in_max_pixel, out_max_pixel, 1);
cmsDeleteTransform(trans);
}//else, we'll just default to [0..1] below
ret.resize(num_channels);
for (unsigned int i=0; i<num_channels; ++i) {
if (out_min_pixel[i] < out_max_pixel[i]) {
ret[i].minVal = out_min_pixel[i];
ret[i].maxVal = out_max_pixel[i];
} else {
// aparently we can't even guarentee that converted_to_double(0x0000) < converted_to_double(0xFFFF)
// assume [0..1] in such cases
// we need to find a really solid way of determining the bounds of a profile, if possible
ret[i].minVal = 0;
ret[i].maxVal = 1;
}
}
}
开发者ID:TheTypoMaster,项目名称:calligra,代码行数:50,代码来源:IccColorProfile.cpp
示例4: SoftProofSampler
static
int SoftProofSampler(register WORD In[], register WORD Out[], register LPVOID Cargo)
{
LPGAMUTCHAIN t = (LPGAMUTCHAIN) Cargo;
WORD Colorant[MAXCHANNELS];
// From pcs to colorant
cmsDoTransform(t -> hForward, In, Colorant, 1);
// Now, do the inverse, from colorant to pcs.
cmsDoTransform(t -> hReverse, Colorant, Out, 1);
return TRUE;
}
开发者ID:Andy-Hay,项目名称:LightZone,代码行数:14,代码来源:cmsgmt.c
示例5: main
int main(int argc, char *argv[])
{
WORD Input[MAXCHANNELS], Output[MAXCHANNELS], PCSLab[MAXCHANNELS], PCSxyz[MAXCHANNELS];
fprintf(stderr, "little cms ColorSpace conversion calculator - v1.8\n\n");
if (argc == 1)
Help();
HandleSwitches(argc, argv);
cmsSetErrorHandler(MyErrorHandler);
OpenTransforms();
for(;;) {
if (xisatty(stdin))
printf("\nEnter values, 'q' to quit\n");
if (feof(stdin))
break;
TakeValues(Input);
cmsDoTransform(hTrans, Input, Output, 1);
if (Verbose) {
if (hTransXYZ) cmsDoTransform(hTransXYZ, Input, PCSxyz, 1);
if (hTransLab) cmsDoTransform(hTransLab, Input, PCSLab, 1);
}
if (xisatty(stdin))
printf("\n");
PrintResults(Output, OutputColorSpace); printf("\n");
if (Verbose && hTransXYZ && hTransLab) {
PrintResults(PCSxyz, icSigXYZData); printf("\n");
PrintResults(PCSLab, icSigLabData); printf("\n");
}
}
return 0;
}
开发者ID:makinacorpus,项目名称:libecw,代码行数:49,代码来源:icctrans.c
示例6: PrintPCSEncoded
static
void PrintPCSEncoded(cmsFloat64Number Input[])
{
if (Verbose > 1 && hTransXYZ && hTransLab) {
cmsUInt16Number XYZ[3], Lab[3];
if (hTransXYZ) cmsDoTransform(hTransXYZ, Input, XYZ, 1);
if (hTransLab) cmsDoTransform(hTransLab, Input, Lab, 1);
printf("[PCS] Lab=(0x%04X,0x%04X,0x%04X) XYZ=(0x%04X,0x%04X,0x%04X)\n", Lab[0], Lab[1], Lab[2],
XYZ[0], XYZ[1], XYZ[2]);
}
}
开发者ID:TestingBytes,项目名称:Little-CMS,代码行数:15,代码来源:transicc.c
示例7: color_man_correct_region
void color_man_correct_region(ColorMan *cm, GdkPixbuf *pixbuf, gint x, gint y, gint w, gint h)
{
ColorManCache *cc;
guchar *pix;
gint rs;
gint i;
gint pixbuf_width, pixbuf_height;
pixbuf_width = gdk_pixbuf_get_width(pixbuf);
pixbuf_height = gdk_pixbuf_get_height(pixbuf);
cc = cm->profile;
pix = gdk_pixbuf_get_pixels(pixbuf);
rs = gdk_pixbuf_get_rowstride(pixbuf);
w = MIN(w, pixbuf_width - x);
h = MIN(h, pixbuf_height - y);
pix += x * ((cc->has_alpha) ? 4 : 3);
for (i = 0; i < h; i++)
{
guchar *pbuf;
pbuf = pix + ((y + i) * rs);
cmsDoTransform(cc->transform, pbuf, pbuf, w);
}
}
开发者ID:metux,项目名称:geeqie,代码行数:31,代码来源:color-man.c
示例8: jpeg_load_cmyk_to_rgb
static void
jpeg_load_cmyk_to_rgb (guchar *buf,
glong pixels,
gpointer transform)
{
const guchar *src = buf;
guchar *dest = buf;
if (transform)
{
cmsDoTransform (transform, buf, buf, pixels);
return;
}
/* NOTE: The following code assumes inverted CMYK values, even when an
APP14 marker doesn't exist. This is the behavior of recent versions
of PhotoShop as well. */
while (pixels--)
{
guint c = src[0];
guint m = src[1];
guint y = src[2];
guint k = src[3];
dest[0] = (c * k) / 255;
dest[1] = (m * k) / 255;
dest[2] = (y * k) / 255;
src += 4;
dest += 3;
}
}
开发者ID:csacx,项目名称:gimp,代码行数:33,代码来源:jpeg-load.c
示例9: cd_icc_effect_generate_cogl_color_data
/**
* cd_icc_effect_generate_cogl_color_data:
**/
static CoglHandle
cd_icc_effect_generate_cogl_color_data (const gchar *filename, GError **error)
{
CoglHandle tex = NULL;
cmsHPROFILE device_profile;
cmsHPROFILE srgb_profile;
cmsUInt8Number *data;
cmsHTRANSFORM transform;
guint array_size;
guint r, g, b;
guint8 *p;
cmsSetLogErrorHandler (cd_icc_effect_error_cb);
srgb_profile = cmsCreate_sRGBProfile ();
device_profile = cmsOpenProfileFromFile (filename, "r");
/* create a cube and cut itup into parts */
array_size = GCM_GLSL_LOOKUP_SIZE * GCM_GLSL_LOOKUP_SIZE * GCM_GLSL_LOOKUP_SIZE;
data = g_new0 (cmsUInt8Number, 3 * array_size);
transform = cmsCreateTransform (srgb_profile, TYPE_RGB_8, device_profile, TYPE_RGB_8, INTENT_PERCEPTUAL, 0);
/* we failed */
if (transform == NULL)
{
g_set_error (error, 1, 0, "could not create transform");
goto out;
}
/* create mapping (blue->r, green->t, red->s) */
for (p = data, b = 0; b < GCM_GLSL_LOOKUP_SIZE; b++) {
for (g = 0; g < GCM_GLSL_LOOKUP_SIZE; g++) {
for (r = 0; r < GCM_GLSL_LOOKUP_SIZE; r++) {
*(p++) = (r * 255) / (GCM_GLSL_LOOKUP_SIZE - 1);
*(p++) = (g * 255) / (GCM_GLSL_LOOKUP_SIZE - 1);
*(p++) = (b * 255) / (GCM_GLSL_LOOKUP_SIZE - 1);
}
}
}
cmsDoTransform (transform, data, data, array_size);
/* creates a cogl texture from the data */
tex = cogl_texture_3d_new_from_data (GCM_GLSL_LOOKUP_SIZE, /* width */
GCM_GLSL_LOOKUP_SIZE, /* height */
GCM_GLSL_LOOKUP_SIZE, /* depth */
COGL_TEXTURE_NO_AUTO_MIPMAP,
COGL_PIXEL_FORMAT_RGB_888,
COGL_PIXEL_FORMAT_ANY,
/* data is tightly packed so we can pass zero */
0, 0,
data, error);
out:
cmsCloseProfile (device_profile);
cmsCloseProfile (srgb_profile);
if (transform != NULL)
cmsDeleteTransform (transform);
g_free (data);
return tex;
}
开发者ID:hughsie,项目名称:colord-playground,代码行数:63,代码来源:cd-icc-effect.c
示例10: cd_sensor_get_sample_wait_cb
static gboolean
cd_sensor_get_sample_wait_cb (GTask *task)
{
CdSensor *sensor = CD_SENSOR (g_task_get_source_object (task));
CdSensorDummyPrivate *priv = cd_sensor_dummy_get_private (sensor);
CdColorXYZ *sample = NULL;
g_autoptr(GError) error = NULL;
/* never setup */
if (priv->transform_fake == NULL) {
g_task_return_new_error (task,
CD_SENSOR_ERROR,
CD_SENSOR_ERROR_NO_SUPPORT,
"no fake transfor set up");
return G_SOURCE_REMOVE;
}
/* run the sample through the profile */
sample = cd_color_xyz_new ();
cmsDoTransform (priv->transform_fake, &priv->sample_fake, sample, 1);
/* emulate */
cd_sensor_button_pressed (sensor);
/* just return without a problem */
g_task_return_pointer (task, sample, (GDestroyNotify) cd_color_xyz_free);
return G_SOURCE_REMOVE;
}
开发者ID:Acidburn0zzz,项目名称:colord,代码行数:28,代码来源:cd-sensor-dummy.c
示例11: transform_convert
static VALUE transform_convert(int argc, VALUE *argv, VALUE self){
if(argc != 4){
return Qnil;
}
cmsHPROFILE hInProfile, hOutProfile;
cmsHTRANSFORM hTransform;
VALUE in = rb_iv_get(self, "@in");
VALUE out = rb_iv_get(self, "@out");
hInProfile = cmsOpenProfileFromFile(RSTRING(in)->ptr, "r");
hOutProfile = cmsOpenProfileFromFile(RSTRING(out)->ptr, "r");
hTransform = cmsCreateTransform(hInProfile, TYPE_CMYK_8,
hOutProfile, TYPE_RGB_8, INTENT_PERCEPTUAL, 0);
cmsCloseProfile(hInProfile);
cmsCloseProfile(hOutProfile);
//TODO: Remove duplication
cmsUInt8Number cmyk_temp[4] = { NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), NUM2INT(argv[3]) };;
cmsUInt8Number rgb_temp[3];
// printf("Transfrom result is cmyk(%d, %d, %d, %d)\n", cmyk_temp[0], cmyk_temp[1], cmyk_temp[2], cmyk_temp[3]);
cmsDoTransform(hTransform, cmyk_temp, rgb_temp, 1);
// printf("Transfrom result is rgb(%d, %d, %d)\n", rgb_temp[0], rgb_temp[1], rgb_temp[2]);
return rb_ary_new3(3, INT2FIX(rgb_temp[0]), INT2FIX(rgb_temp[1]), INT2FIX(rgb_temp[2]));
}
开发者ID:pftg,项目名称:little-cms-ruby,代码行数:35,代码来源:lcms.c
示例12: PrintPCSFloat
static
void PrintPCSFloat(cmsFloat64Number Input[])
{
if (Verbose > 1 && hTransXYZ && hTransLab) {
cmsCIEXYZ XYZ = { 0, 0, 0 };
cmsCIELab Lab = { 0, 0, 0 };
if (hTransXYZ) cmsDoTransform(hTransXYZ, Input, &XYZ, 1);
if (hTransLab) cmsDoTransform(hTransLab, Input, &Lab, 1);
printf("[PCS] Lab=(%.4f,%.4f,%.4f) XYZ=(%.4f,%.4f,%.4f)\n", Lab.L, Lab.a, Lab.b,
XYZ.X * 100.0, XYZ.Y * 100.0, XYZ.Z * 100.0);
}
}
开发者ID:TestingBytes,项目名称:Little-CMS,代码行数:16,代码来源:transicc.c
示例13: pycms_TransformPixel
static PyObject *
pycms_TransformPixel (PyObject *self, PyObject *args) {
unsigned char *inbuf;
int channel1,channel2,channel3,channel4;
void *transform;
cmsHTRANSFORM hTransform;
PyObject *result;
if (!PyArg_ParseTuple(args, "Oiiii", &transform, &channel1, &channel2, &channel3, &channel4)) {
Py_INCREF(Py_None);
return Py_None;
}
inbuf=malloc(4);
inbuf[0]=(unsigned char)channel1;
inbuf[1]=(unsigned char)channel2;
inbuf[2]=(unsigned char)channel3;
inbuf[3]=(unsigned char)channel4;
hTransform = (cmsHTRANSFORM) PyCObject_AsVoidPtr(transform);
cmsDoTransform(hTransform, inbuf, inbuf, 1);
result = Py_BuildValue("[iiii]", inbuf[0], inbuf[1], inbuf[2], inbuf[3]);
free(inbuf);
return result;
}
开发者ID:dlajarretie,项目名称:uniconvertor,代码行数:28,代码来源:_cms2.c
示例14: pycms_TransformPixel2
static PyObject *
pycms_TransformPixel2 (PyObject *self, PyObject *args) {
double channel1,channel2,channel3,channel4;
unsigned char *inbuf;
void *transform;
cmsHTRANSFORM hTransform;
PyObject *result;
if (!PyArg_ParseTuple(args, "Odddd", &transform, &channel1, &channel2, &channel3, &channel4)) {
Py_INCREF(Py_None);
return Py_None;
}
inbuf=malloc(4);
inbuf[0]=(unsigned char)(channel1*255);
inbuf[1]=(unsigned char)(channel2*255);
inbuf[2]=(unsigned char)(channel3*255);
inbuf[3]=(unsigned char)(channel4*255);
hTransform = (cmsHTRANSFORM) PyCObject_AsVoidPtr(transform);
cmsDoTransform(hTransform, inbuf, inbuf, 1);
result = Py_BuildValue("(dddd)", (double)inbuf[0]/255, (double)inbuf[1]/255,
(double)inbuf[2]/255, (double)inbuf[3]/255);
free(inbuf);
return result;
}
开发者ID:dlajarretie,项目名称:uniconvertor,代码行数:30,代码来源:_cms2.c
示例15: lcms_image_transform_indexed
static void
lcms_image_transform_indexed (gint32 image,
cmsHPROFILE src_profile,
cmsHPROFILE dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc)
{
cmsHTRANSFORM transform;
guchar *cmap;
gint n_cmap_bytes;
cmsUInt32Number format = TYPE_RGB_8;
cmap = gimp_image_get_colormap (image, &n_cmap_bytes);
transform = cmsCreateTransform (src_profile, format,
dest_profile, format,
intent,
cmsFLAGS_NOOPTIMIZE |
(bpc ? cmsFLAGS_BLACKPOINTCOMPENSATION : 0));
if (transform)
{
cmsDoTransform (transform, cmap, cmap, n_cmap_bytes / 3);
cmsDeleteTransform (transform);
}
else
{
g_warning ("cmsCreateTransform() failed!");
}
gimp_image_set_colormap (image, cmap, n_cmap_bytes);
}
开发者ID:K-Sonoda,项目名称:gimp,代码行数:32,代码来源:lcms.c
示例16: ComputeKToLstar
// Compute K -> L* relationship. Flags may include black point compensation. In this case,
// the relationship is assumed from the profile with BPC to a black point zero.
static
LPGAMMATABLE ComputeKToLstar(cmsHPROFILE hProfile, int nPoints, int Intent, DWORD dwFlags)
{
LPGAMMATABLE out;
int i;
WORD cmyk[4], wLab[3];
cmsHPROFILE hLab = cmsCreateLabProfile(NULL);
cmsHTRANSFORM xform = cmsCreateTransform(hProfile, TYPE_CMYK_16,
hLab, TYPE_Lab_16,
Intent, (dwFlags|cmsFLAGS_NOTPRECALC));
out = cmsAllocGamma(nPoints);
for (i=0; i < nPoints; i++) {
cmyk[0] = 0;
cmyk[1] = 0;
cmyk[2] = 0;
cmyk[3] = _cmsQuantizeVal(i, nPoints);
cmsDoTransform(xform, cmyk, wLab, 1);
out->GammaTable[i] = (WORD) (0xFFFF - wLab[0]);
}
cmsDeleteTransform(xform);
cmsCloseProfile(hLab);
return out;
}
开发者ID:Andy-Hay,项目名称:LightZone,代码行数:31,代码来源:cmsgmt.c
示例17: EstimateTAC
// This callback just accounts the maximum ink dropped in the given node. It does not populate any
// memory, as the destination table is NULL. Its only purpose it to know the global maximum.
static
int EstimateTAC(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo)
{
cmsTACestimator* bp = (cmsTACestimator*) Cargo;
cmsFloat32Number RoundTrip[cmsMAXCHANNELS];
cmsUInt32Number i;
cmsFloat32Number Sum;
// Evaluate the xform
cmsDoTransform(bp->hRoundTrip, In, RoundTrip, 1);
// All all amounts of ink
for (Sum=0, i=0; i < bp ->nOutputChans; i++)
Sum += RoundTrip[i];
// If above maximum, keep track of input values
if (Sum > bp ->MaxTAC) {
bp ->MaxTAC = Sum;
for (i=0; i < bp ->nOutputChans; i++) {
bp ->MaxInput[i] = In[i];
}
}
return TRUE;
cmsUNUSED_PARAMETER(Out);
}
开发者ID:Gustfh,项目名称:jdk8u-dev-jdk,代码行数:32,代码来源:cmsgmt.c
示例18: lcms_image_transform_indexed
static void
lcms_image_transform_indexed (gint32 image,
cmsHPROFILE src_profile,
cmsHPROFILE dest_profile,
GimpColorRenderingIntent intent,
gboolean bpc)
{
cmsHTRANSFORM transform;
guchar *cmap;
gint num_colors;
cmap = gimp_image_get_colormap (image, &num_colors);
transform = cmsCreateTransform (src_profile, TYPE_RGB_8,
dest_profile, TYPE_RGB_8,
intent,
bpc ? cmsFLAGS_BLACKPOINTCOMPENSATION : 0);
if (transform)
{
cmsDoTransform (transform, cmap, cmap, num_colors);
cmsDeleteTransform(transform);
}
else
{
g_warning ("cmsCreateTransform() failed!");
}
gimp_image_set_colormap (image, cmap, num_colors);
}
开发者ID:DevMaggio,项目名称:gimp,代码行数:30,代码来源:lcms.c
示例19: pycms_TransformBitmap
static PyObject *
pycms_TransformBitmap (PyObject *self, PyObject *args) {
ImagingObject* inImage;
ImagingObject* outImage;
Imaging inImg, outImg;
void *transform;
cmsHTRANSFORM hTransform;
int width, height, i;
if (!PyArg_ParseTuple(args, "OOOii", &transform, &inImage, &outImage, &width, &height)) {
Py_INCREF(Py_None);
return Py_None;
}
inImg=inImage->image;
outImg=outImage->image;
hTransform = (cmsHTRANSFORM) PyCObject_AsVoidPtr(transform);
for (i = 0; i < height; i++) {
cmsDoTransform(hTransform, inImg->image[i], outImg->image[i], width);
}
Py_INCREF(Py_None);
return Py_None;
}
开发者ID:dlajarretie,项目名称:uniconvertor,代码行数:27,代码来源:_cms2.c
示例20: cluster_preview_expose
static gboolean
cluster_preview_expose (GtkWidget *widget, GdkEventExpose *event, dt_iop_module_t *self)
{
// dt_iop_colortransfer_params_t *p = (dt_iop_colortransfer_params_t *)self->params;
dt_iop_colortransfer_gui_data_t *g = (dt_iop_colortransfer_gui_data_t *)self->gui_data;
dt_iop_colortransfer_params_t *p = (dt_iop_colortransfer_params_t *)&g->flowback;
if(!g->flowback_set) p = (dt_iop_colortransfer_params_t *)self->params;
const int inset = 5;
int width = widget->allocation.width, height = widget->allocation.height;
cairo_surface_t *cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cr = cairo_create(cst);
cairo_set_source_rgb (cr, .2, .2, .2);
cairo_paint(cr);
cairo_translate(cr, inset, inset);
width -= 2*inset;
height -= 2*inset;
if(g->flowback_set) gtk_widget_set_sensitive(g->apply_button, TRUE);
#if 0
if(g->flowback_set)
{
memcpy(self->params, &g->flowback, self->params_size);
g->flowback_set = 0;
p->flag = APPLY;
dt_dev_add_history_item(darktable.develop, self, TRUE);
}
#endif
const float sep = 2.0;
const float qwd = (width-(p->n-1)*sep)/(float)p->n;
for(int cl=0; cl<p->n; cl++)
{
// draw cluster
for(int j=-1; j<=1; j++) for(int i=-1; i<=1; i++)
{
// draw 9x9 grid showing mean and variance of this cluster.
double rgb[3] = {0.5, 0.5, 0.5};
cmsCIELab Lab;
Lab.L = 5.0;//53.390011;
Lab.a = (p->mean[cl][0] + i*p->var[cl][0]);// / Lab.L;
Lab.b = (p->mean[cl][1] + j*p->var[cl][1]);// / Lab.L;
Lab.L = 53.390011;
cmsDoTransform(g->xform, &Lab, rgb, 1);
cairo_set_source_rgb (cr, rgb[0], rgb[1], rgb[2]);
cairo_rectangle(cr, qwd*(i+1)/3.0, height*(j+1)/3.0, qwd/3.0-.5, height/3.0-.5);
cairo_fill(cr);
}
cairo_translate (cr, qwd + sep, 0);
}
cairo_destroy(cr);
cairo_t *cr_pixmap = gdk_cairo_create(gtk_widget_get_window(widget));
cairo_set_source_surface (cr_pixmap, cst, 0, 0);
cairo_paint(cr_pixmap);
cairo_destroy(cr_pixmap);
cairo_surface_destroy(cst);
return TRUE;
}
开发者ID:chubinou,项目名称:darktable,代码行数:59,代码来源:colortransfer.c
注:本文中的cmsDoTransform函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论