Hi,

> I wanna convert from RGB to Lab and back.
> What goes wrong with my data?

If you declare buffer as being WORD:

> unsigned short InputBuffer[3];
> unsigned short OutputBuffer[3];

Then you should use TYPE_RGB_16, TYPE_Lab_16 instead.

Also, you need to decode Lab to floating point by using
cmsLabEncoded2Float()

Of course, if you are using latest version, this is a lot easier, since
version 1.10 does accept double values directly:

// ----- sample using 1.10

#include "lcms.h"

int main(int argc, char* argv[])
{

  cmsHTRANSFORM hTransform;
  unsigned char InputBuffer[3];
  double Lab[3];

  cmsHPROFILE hLab  = cmsCreateLabProfile(NULL);
  cmsHPROFILE hsRGB  = cmsCreate_sRGBProfile();

  InputBuffer[0] = (unsigned char) atoi(argv[1]);
  InputBuffer[1] = (unsigned char) atoi(argv[2]);
  InputBuffer[2] = (unsigned char) atoi(argv[3]);

  hTransform = cmsCreateTransform(hsRGB,
                                  TYPE_RGB_8,
                                  hLab,
                                  TYPE_Lab_DBL,
                                  INTENT_PERCEPTUAL, 0);

  cmsDoTransform(hTransform, InputBuffer,
                             Lab,
                             1);

  printf ("R=%d\tG=%d\tB=%d\n",InputBuffer[0], InputBuffer[1], InputBuffer[2]);
  printf ("L=%d\ta=%d\tb=%d\n", Lab[0], Lab[1], Lab[2]);

  return 0;
}

// ----------------------------------------
// ----- sample using 1.09

#include "lcms.h"

int main(int argc, char* argv[])
{

  cmsHTRANSFORM hTransform;
  unsigned char InputBuffer[3];
  unsigned short OutputBuffer[3];
  cmsCIELab Lab;

  cmsHPROFILE hLab  = cmsCreateLabProfile(NULL);
  cmsHPROFILE hsRGB  = cmsCreate_sRGBProfile();

  InputBuffer[0] = (unsigned char) atoi(argv[1]);
  InputBuffer[1] = (unsigned char) atoi(argv[2]);
  InputBuffer[2] = (unsigned char) atoi(argv[3]);

  hTransform = cmsCreateTransform(hsRGB,
                                  TYPE_RGB_8,
                                  hLab,
                                  TYPE_Lab_16,
                                  INTENT_PERCEPTUAL, 0);

  cmsDoTransform(hTransform, InputBuffer,
                             OutputBuffer,
                             1);

  cmmLabEncoded2Float(&Lab, OutputBuffer);

  printf ("R=%d\tG=%d\tB=%d\n",InputBuffer[0], InputBuffer[1], InputBuffer[2]);
  printf ("L=%d\ta=%d\tb=%d\n", Lab.L, Lab.a, Lab.b);

  return 0;
}


Please check it because I just typed the samples without testing them.

Regards,
Mart� Maria
The little cms project
http://www.littlecms.com
[EMAIL PROTECTED]


----- Original Message -----
From: "Kai-Uwe Behrmann" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, February 05, 2003 10:40 AM
Subject: [Lcms-user] Are the types right here?


> Hi,
> I wanna convert from RGB to Lab and back.
> What goes wrong with my data?
>
> C-code sample is attached.
>
> thanks,
> Kai-Uwe
>



-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
Lcms-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/lcms-user

Reply via email to