本文整理汇总了C++中cmsDoTransform函数的典型用法代码示例。如果您正苦于以下问题:C++ cmsDoTransform函数的具体用法?C++ cmsDoTransform怎么用?C++ cmsDoTransform使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cmsDoTransform函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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;
}
示例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;
}
示例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;
}
}
}
示例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;
}
示例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;
}
示例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]);
}
}
示例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);
}
}
示例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;
}
}
示例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;
}
示例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;
}
示例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]));
}
示例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);
}
}
示例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;
}
示例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;
}
示例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);
}