lcms-user Mailing List for Little cms color engine (Page 10)
An ICC-based CMM for color management
Brought to you by:
mm2
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(15) |
Jun
(24) |
Jul
(9) |
Aug
(14) |
Sep
|
Oct
(12) |
Nov
(17) |
Dec
(31) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(34) |
Feb
(7) |
Mar
(7) |
Apr
(16) |
May
(4) |
Jun
(14) |
Jul
(34) |
Aug
(54) |
Sep
(11) |
Oct
(25) |
Nov
(1) |
Dec
(6) |
2003 |
Jan
(27) |
Feb
(54) |
Mar
(23) |
Apr
(68) |
May
(82) |
Jun
(36) |
Jul
(45) |
Aug
(45) |
Sep
(49) |
Oct
(30) |
Nov
(65) |
Dec
(23) |
2004 |
Jan
(52) |
Feb
(52) |
Mar
(35) |
Apr
(38) |
May
(93) |
Jun
(22) |
Jul
(51) |
Aug
(50) |
Sep
(73) |
Oct
(28) |
Nov
(30) |
Dec
(51) |
2005 |
Jan
(22) |
Feb
(79) |
Mar
(38) |
Apr
(51) |
May
(95) |
Jun
(60) |
Jul
(56) |
Aug
(49) |
Sep
(22) |
Oct
(43) |
Nov
(15) |
Dec
(40) |
2006 |
Jan
(51) |
Feb
(31) |
Mar
(37) |
Apr
(25) |
May
(9) |
Jun
(13) |
Jul
(17) |
Aug
(66) |
Sep
(7) |
Oct
(12) |
Nov
(14) |
Dec
(31) |
2007 |
Jan
(18) |
Feb
(9) |
Mar
(22) |
Apr
(18) |
May
(5) |
Jun
(25) |
Jul
(2) |
Aug
(15) |
Sep
(12) |
Oct
(40) |
Nov
(10) |
Dec
(23) |
2008 |
Jan
(21) |
Feb
(56) |
Mar
(12) |
Apr
(23) |
May
(47) |
Jun
(75) |
Jul
(24) |
Aug
(2) |
Sep
(7) |
Oct
(26) |
Nov
(20) |
Dec
(16) |
2009 |
Jan
(14) |
Feb
(1) |
Mar
(29) |
Apr
(54) |
May
(18) |
Jun
(16) |
Jul
(5) |
Aug
(3) |
Sep
(38) |
Oct
(6) |
Nov
(25) |
Dec
(28) |
2010 |
Jan
(11) |
Feb
(26) |
Mar
(2) |
Apr
(10) |
May
(45) |
Jun
(94) |
Jul
(11) |
Aug
(32) |
Sep
(18) |
Oct
(37) |
Nov
(19) |
Dec
(34) |
2011 |
Jan
(21) |
Feb
(16) |
Mar
(16) |
Apr
(29) |
May
(17) |
Jun
(18) |
Jul
(7) |
Aug
(21) |
Sep
(10) |
Oct
(7) |
Nov
(15) |
Dec
(6) |
2012 |
Jan
(13) |
Feb
(16) |
Mar
(15) |
Apr
(12) |
May
(15) |
Jun
(31) |
Jul
(22) |
Aug
(15) |
Sep
(46) |
Oct
(21) |
Nov
(15) |
Dec
(33) |
2013 |
Jan
(19) |
Feb
(17) |
Mar
(31) |
Apr
(17) |
May
(27) |
Jun
(24) |
Jul
(26) |
Aug
(11) |
Sep
(9) |
Oct
(22) |
Nov
(14) |
Dec
(16) |
2014 |
Jan
(20) |
Feb
(66) |
Mar
(29) |
Apr
(13) |
May
(9) |
Jun
|
Jul
(11) |
Aug
(21) |
Sep
(15) |
Oct
(5) |
Nov
(5) |
Dec
(10) |
2015 |
Jan
(6) |
Feb
(26) |
Mar
(26) |
Apr
|
May
(9) |
Jun
(5) |
Jul
(5) |
Aug
(11) |
Sep
(8) |
Oct
|
Nov
|
Dec
|
2016 |
Jan
(3) |
Feb
|
Mar
(9) |
Apr
(3) |
May
(16) |
Jun
(26) |
Jul
(32) |
Aug
(27) |
Sep
(9) |
Oct
|
Nov
(4) |
Dec
(10) |
2017 |
Jan
(11) |
Feb
(44) |
Mar
(6) |
Apr
(8) |
May
(1) |
Jun
(2) |
Jul
(34) |
Aug
(28) |
Sep
(3) |
Oct
(9) |
Nov
(3) |
Dec
|
2018 |
Jan
(1) |
Feb
(5) |
Mar
(6) |
Apr
(1) |
May
(1) |
Jun
(2) |
Jul
|
Aug
(1) |
Sep
(6) |
Oct
|
Nov
(6) |
Dec
|
2019 |
Jan
(18) |
Feb
(16) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(7) |
Sep
(3) |
Oct
(10) |
Nov
(1) |
Dec
(3) |
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(17) |
Jun
(23) |
Jul
|
Aug
(4) |
Sep
|
Oct
|
Nov
|
Dec
|
2021 |
Jan
(10) |
Feb
(3) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(5) |
Oct
|
Nov
(1) |
Dec
|
2022 |
Jan
(8) |
Feb
|
Mar
(9) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(13) |
Nov
(12) |
Dec
|
2023 |
Jan
|
Feb
(1) |
Mar
(9) |
Apr
|
May
(3) |
Jun
(5) |
Jul
(3) |
Aug
(8) |
Sep
|
Oct
|
Nov
(1) |
Dec
(9) |
2024 |
Jan
(8) |
Feb
|
Mar
(14) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
(1) |
Feb
(1) |
Mar
(1) |
Apr
(2) |
May
(5) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <mar...@li...> - 2019-01-21 09:26:21
|
Hi, >> VS 2017 produces a warning when including lcms2.h from C++ code: >> "warning C5033: 'register' is no longer a supported storage class". > > These declarations appear wrong to me, regardless of C++. This comes from the early days of lcms1. It is part of C99, which is the standard required by lcms2: "6.7.1 Storage-class specifiers 4 A declaration of an identifier for an object with storage-class specifier register suggests that access to the object be as fast as possible. The extent to which such suggestions are effective is implementation-defined 6.7.5.3 Function declarators (including prototypes) 2 The only storage-class specifier that shall occur in a parameter declaration is register 6.9.1 Function definitions 6 […] The declarations in the declaration list shall contain no storage-class specifier other than register and no initializations." Having said this, I don't see any evil on using a toggle in lcms to prevent register keyword, but set to off by default and disabled when .so/DLL is being used. As Bob says, the big issue here is ABI compatibility. On most compilers register does nothing when used in parameters of exported functions, but in some embedded it is implemented and it makes a difference. On these cases there are no shared objects involved. So, please let me know... should I add an hypothetical CMS_NO_REGISTER_KEYWORD, undefined by default, that would get rid of register on params? or maybe get rid of register completely when the option is selected? Please note in any case lcms2 will stay on C99 standard, and therefore register has to be supported. As said, on some embedded compilers proper use of register makes huge difference on throughput. Regards Marti |
From: Noel C. <NCa...@Pr...> - 2019-01-19 04:09:42
|
Hi Fellow LCMS users, This represents one of the few files where at my company we've decided to maintain our own slightly modified version of the Little CMS library. While not a big deal, it does represent a small ongoing expenditure of additional effort. Since the C++ compilers we use aren't influenced by the register keyword I support Hanno's request to consider removing it. -Noel Carboni ProDigital Software -----Original Message----- From: Hanno Hoffstadt [mailto:Han...@gm...] Sent: Fri, January 18, 2019 6:37 AM To: Lcm...@li... Subject: [Lcms-user] C++17 "register" warning when including lcms2.h Hi, VS 2017 produces a warning when including lcms2.h from C++ code: "warning C5033: 'register' is no longer a supported storage class". I've read that "register" is still valid C, just not C++17, see also https://developercommunity.visualstudio.com/content/problem/117986/unexpected-warning-c5033-for- using-register-storag.html Out of curiosity, I've removed the keyword from all interfaces and compared the result of the testbed. Performance of register- and non-register versions were identical on x64 lcms2-2.9 builds, both on MacOSX (Apple LLVM version 9.0.0) and Windows 10 VS 2017. So I wonder if it would be possible to remove the keyword and leave this optimization to the compiler, or is it still needed for old compilers / systems? Best regards Hanno _______________________________________________ Lcms-user mailing list Lcm...@li... https://lists.sourceforge.net/lists/listinfo/lcms-user |
From: Bob F. <bfr...@si...> - 2019-01-18 14:17:07
|
On Fri, 18 Jan 2019, Hanno Hoffstadt wrote: > Hi, > > VS 2017 produces a warning when including lcms2.h from C++ code: > "warning C5033: 'register' is no longer a supported storage class". These declarations appear wrong to me, regardless of C++. The way parameters are passed by function call interfaces (whether via registers and/or stack) are defined by the ABI definition (function calling conventions are part of ABI definitions) for the particular target platform. Only interfaces which are not extern and can be inlined/optimized by the compiler would be able to avoid this since they are not defined by the ABI and thus the compiler can do what it wants. Now there is some risk that a code difference will appear if these 'register' declarations are removed from the lcms public headers. If these callbacks are used internally by liblcms, then there might be a change to generated code in the library. Bob -- Bob Friesenhahn bfr...@si..., http://www.simplesystems.org/users/bfriesen/ GraphicsMagick Maintainer, http://www.GraphicsMagick.org/ Public Key, http://www.simplesystems.org/users/bfriesen/public-key.txt |
From: Hanno H. <Han...@gm...> - 2019-01-18 12:49:09
|
Hi, VS 2017 produces a warning when including lcms2.h from C++ code: "warning C5033: 'register' is no longer a supported storage class". I've read that "register" is still valid C, just not C++17, see also https://developercommunity.visualstudio.com/content/problem/117986/unexpected-warning-c5033-for-using-register-storag.html Out of curiosity, I've removed the keyword from all interfaces and compared the result of the testbed. Performance of register- and non-register versions were identical on x64 lcms2-2.9 builds, both on MacOSX (Apple LLVM version 9.0.0) and Windows 10 VS 2017. So I wonder if it would be possible to remove the keyword and leave this optimization to the compiler, or is it still needed for old compilers / systems? Best regards Hanno |
From: Marti M. <mar...@li...> - 2019-01-02 19:23:04
|
<div dir='auto'><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Jan 2, 2019 13:43, Vincent Torri <vin...@gm...> wrote:<blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr"> <br> can't you add functions which use their changes ? So just API additions ? <br></p></blockquote></div></div></div><div dir="auto">I'm afraid that is all functions, so this means duplicating the entire API. I spent long time trying to figure out how to integrate those changes without breaking compatibility, but found no way. For an hypotetical lcms3, maybe. But for now it is difficult. Technically difficult and complicated for me, that unfortunately have little time for this project.</div><div dir="auto"><br></div><div dir="auto">Regards</div><div dir="auto">Marti</div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr"> </p> </blockquote></div><br></div></div></div> |
From: Vincent T. <vin...@gm...> - 2019-01-02 12:43:39
|
On Wed, Jan 2, 2019 at 12:06 PM Marti <mar...@li...> wrote: > > > Thanks Vicent, > > I am already in contact with Artifex, they told me about their fork. > > Please note lcms already is multi-threading capable, and some critical > functions like cmsDoTransform are re-entrant. By default, it uses pthreads > on everything but windows, that uses critical sections instead. > > Artifex have added a way to pass parameters to each function to identify the > thread, but unfortunately this breaks all compatibility with prior APIs, so > I had to reject the changes on upstream because compatibility sake. The > "normal" lcms is based on contexts. It allows you to change via plug-in's > the locking strategy and the memory allocation. can't you add functions which use their changes ? So just API additions ? Vincent Torri |
From: Marti <mar...@li...> - 2019-01-02 11:20:39
|
Thanks Vicent, I am already in contact with Artifex, they told me about their fork. Please note lcms already is multi-threading capable, and some critical functions like cmsDoTransform are re-entrant. By default, it uses pthreads on everything but windows, that uses critical sections instead. Artifex have added a way to pass parameters to each function to identify the thread, but unfortunately this breaks all compatibility with prior APIs, so I had to reject the changes on upstream because compatibility sake. The "normal" lcms is based on contexts. It allows you to change via plug-in's the locking strategy and the memory allocation. Regards Marti -----Original Message----- From: Vincent Torri [mailto:vin...@gm...] Sent: Wednesday, January 2, 2019 9:08 AM To: Lcm...@li... Subject: [Lcms-user] multi threaded fork Hello i've seen this mupdf/ghostsciprt fork which adds multi threading : http://git.ghostscript.com/?p=thirdparty-lcms2.git;a=commitdiff;h=c9f2256ff2 479a219a5b3521c57b5adeded0d6ac in case it interests you regards Vincent Torri _______________________________________________ Lcms-user mailing list Lcm...@li... https://lists.sourceforge.net/lists/listinfo/lcms-user |
From: Robin W. <rob...@ar...> - 2019-01-02 11:03:48
|
On 02/01/2019 08:07, Vincent Torri wrote: > i've seen this mupdf/ghostsciprt fork which adds multi threading : > > http://git.ghostscript.com/?p=thirdparty-lcms2.git;a=commitdiff;h=c9f2256ff2479a219a5b3521c57b5adeded0d6ac A better link: http://git.ghostscript.com/?p=thirdparty-lcms2.git;a=shortlog;h=refs/heads/lcms2mt And for why the fork exists, read: http://git.ghostscript.com/?p=thirdparty-lcms2.git;a=blob;f=doc/WhyThisFork.txt;h=e3cbde475a32ce6d75cb9d6c42bf6bb9e8fbf023;hb=2e1587ee015b168399a6b2fde86858e8396c9a59 HTH, Robin |
From: Vincent T. <vin...@gm...> - 2019-01-02 08:08:17
|
Hello i've seen this mupdf/ghostsciprt fork which adds multi threading : http://git.ghostscript.com/?p=thirdparty-lcms2.git;a=commitdiff;h=c9f2256ff2479a219a5b3521c57b5adeded0d6ac in case it interests you regards Vincent Torri |
From: Vincent T. <vin...@gm...> - 2018-11-27 20:11:34
|
Hello i've browsed the pdfium source code and found this : https://pdfium.googlesource.com/pdfium/+/master/third_party/lcms/ There are around 30 patches for lcms2. I don't know if all of them are good or not, i just want to mention them. Maybe it can help and improve lcms2 regards Vincent Torri |
From: Aurélien P. <re...@au...> - 2018-11-05 07:08:05
|
Hi, Le 04/11/2018 à 23:38, Graeme Gill a écrit : > Hi, > >> I understand the theory of profiling and error reverting with LUT or TRC, it's on the >> actual implementation that I'm lost, and what actually happens in the pixelpipe. > seems then that this is really a question for those who understand > darktable's internals. > > Note though, that changing the display profile to allow for a change > in the source color encoding, is 100% wrong. > Instead you need to make the source color encoding match the > source profile. Note that in this context "source" means the > input to the conversion to display space made using lcms, > which is the output of darktables photo processing. I know, for now I'm trying to debug and understand what's going on, elegant solutions will come later. >> output Lab values are off, too bright : data 50 % Lab (measured on a RAW photo of a ColorChecker grey >> patch with white patch properly exposed) is shown as 75 % screen Lab. Given that 0.5^(1/2.4) = 0.75, >> that sounds like a gamma issue. > Hmm. That's an odd way of measurement, given that gamma usually relates linear light to > gamma encoded, while L* is a non-linear light measure. > > Are you sure that your "50 % Lab" is actual L*, and not a linear light % ? > > i.e. a 50% linear light value would be expected to measure approximately > L* 76 if white is L*100. Oh God, yes, you are right. darktable labels it L but it is L* (looking at the code). So I was mislead the whole time and everything is perfectly normal. Thanks a lot for your time, Aurélien. > > ( L* = linear_light^1/3 * 116 - 16) > > Cheers, > Graeme Gill. > |
From: Graeme G. <gr...@ar...> - 2018-11-05 04:38:42
|
Aurélien Pierre wrote: Hi, > I understand the theory of profiling and error reverting with LUT or TRC, it's on the > actual implementation that I'm lost, and what actually happens in the pixelpipe. seems then that this is really a question for those who understand darktable's internals. Note though, that changing the display profile to allow for a change in the source color encoding, is 100% wrong. Instead you need to make the source color encoding match the source profile. Note that in this context "source" means the input to the conversion to display space made using lcms, which is the output of darktables photo processing. > output Lab values are off, too bright : data 50 % Lab (measured on a RAW photo of a ColorChecker grey > patch with white patch properly exposed) is shown as 75 % screen Lab. Given that 0.5^(1/2.4) = 0.75, > that sounds like a gamma issue. Hmm. That's an odd way of measurement, given that gamma usually relates linear light to gamma encoded, while L* is a non-linear light measure. Are you sure that your "50 % Lab" is actual L*, and not a linear light % ? i.e. a 50% linear light value would be expected to measure approximately L* 76 if white is L*100. ( L* = linear_light^1/3 * 116 - 16) Cheers, Graeme Gill. |
From: Aurélien P. <re...@au...> - 2018-11-05 03:45:07
|
Hi Graeme, thank you for your answer. The problem I have is that, in darktable, it seems the image is gamma-corrected twice : * output Lab values are off, too bright : data 50 % Lab (measured on a RAW photo of a ColorChecker grey patch with white patch properly exposed) is shown as 75 % screen Lab. Given that 0.5^(1/2.4) = 0.75, that sounds like a gamma issue. * masks featherings show some sort of quantization artifacts on the edges, * linear grey ramps in an image (PNG synthesized grey gradient) looks washed away for the most part (again, too bright). It is solved by removing the tonecurves from the output color conversion or by using Elle Stones Identity ICC profile (gamma 1.0) as a display profile in the software (but, of course, colors are desaturated then). For usual RGB output spaces, this is done with darktable internal functions (easy to hack), but for exotic RGB output spaces, LittleCMS handles that with black boxes. Or maybe I'm wrong and there is some place elsewhere in the code where arbitrary gamma 2.4 conversions happen. I understand the theory of profiling and error reverting with LUT or TRC, it's on the actual implementation that I'm lost, and what actually happens in the pixelpipe. Thank you, Aurélien. Le 04/11/2018 à 18:56, Graeme Gill a écrit : > Aurélien Pierre wrote: > > Hi, > >> I'm working on the software darktable to enable a linear workflow (no gamma correction >> from the display, this is done by a log2 function internally), in order to visualize the >> data in the scene-referred space. >> I'm looking for a way to keep the RGB primaries but remove the TCR/tonecurve from that >> xform in order to suppress the gamma correction. So far, I'm clueless. Is that possible ? > it's not really clear what you are attempting to do. > > Note that all conventional displays have a gamma reproduction characteristic - the > display light levels are non-linearly related to the frame buffer control values. > This is because it makes the control values more perceptually uniform, > and therefore there is less visual quantization with limited frame buffer depth > or video signal encoding depth. > > Typically the term "gamma correction" means the image processing > system applying the anti-gamma of the display, in order to cancel > out the effects of the gamma response, so that the code can > deal with linear light levels in computation. > > In an ICC profile color managed system though, the display profile provides > a mapping between PCS (i.e. CIE standard observer, device independent) values > and the display control (i.e. device) values. (i.e. it provides the > inversion of the display behavior.) > > PCS can be either CIE XYZ or CIE L*a*b* D50 white point values. > These are effectively interchangeable, since the conversion > is fixed. CIE XYZ values are linear light. > > So you don't really need a proofing transform to send linear light > values to the display, you just need the inverse (i.e. B2A direction) > ICC device profile. Note though that the range of values is limited > by the display gamut. > > A soft proofing transform is typically quite complex, involving > three device profiles i.e.: > > Source color space -> input profile -> proofing profile -> Proofing colorspace -> > proofing profile -> output profile -> Output colorspace. > > i.e. the transform does a color conversion from the source color space > to the proofing space, and then converts that to the output (typically > display) color space. The purpose is typically to be able to > see the gamut mapping characteristics of the proofing device (i.e. printer), > while viewing on a different device (i.e. display). Note that within > the gamut and the accuracy of the profiles, the color fidelity > will be maintained by the color management system. > > If that's really what you want to do (i.e. you really want to do > a soft proof, because you are targeting (say) a printer), then you > control the source color space by your choice of source ICC profile. > i.e. if you want the source to be a linear light RGB type space, > then you need to create or use such a profile as the source profile. > > This is because the whole point of a color management system > is to manage the color. Its purpose is to be closed loop control. > So you provide a color, define what that color means by providing > a color profile (the source profile) or use a device independent > color encoding like XYZ or L*a*b*, and then the color management > system takes care of faithfully conveying that color to the output > device as much as is possible, without you having to know > much about how that device behaves. > > Note that if you don't really wish to use a proofing transform, > you would use the simpler cmsCreateTransform(), which converts > between your source colorspace and your display. > > Hope this helps, > > Graeme Gill. > > > _______________________________________________ > Lcms-user mailing list > Lcm...@li... > https://lists.sourceforge.net/lists/listinfo/lcms-user |
From: Graeme G. <gr...@ar...> - 2018-11-04 23:56:08
|
Aurélien Pierre wrote: Hi, > I'm working on the software darktable to enable a linear workflow (no gamma correction > from the display, this is done by a log2 function internally), in order to visualize the > data in the scene-referred space. > I'm looking for a way to keep the RGB primaries but remove the TCR/tonecurve from that > xform in order to suppress the gamma correction. So far, I'm clueless. Is that possible ? it's not really clear what you are attempting to do. Note that all conventional displays have a gamma reproduction characteristic - the display light levels are non-linearly related to the frame buffer control values. This is because it makes the control values more perceptually uniform, and therefore there is less visual quantization with limited frame buffer depth or video signal encoding depth. Typically the term "gamma correction" means the image processing system applying the anti-gamma of the display, in order to cancel out the effects of the gamma response, so that the code can deal with linear light levels in computation. In an ICC profile color managed system though, the display profile provides a mapping between PCS (i.e. CIE standard observer, device independent) values and the display control (i.e. device) values. (i.e. it provides the inversion of the display behavior.) PCS can be either CIE XYZ or CIE L*a*b* D50 white point values. These are effectively interchangeable, since the conversion is fixed. CIE XYZ values are linear light. So you don't really need a proofing transform to send linear light values to the display, you just need the inverse (i.e. B2A direction) ICC device profile. Note though that the range of values is limited by the display gamut. A soft proofing transform is typically quite complex, involving three device profiles i.e.: Source color space -> input profile -> proofing profile -> Proofing colorspace -> proofing profile -> output profile -> Output colorspace. i.e. the transform does a color conversion from the source color space to the proofing space, and then converts that to the output (typically display) color space. The purpose is typically to be able to see the gamut mapping characteristics of the proofing device (i.e. printer), while viewing on a different device (i.e. display). Note that within the gamut and the accuracy of the profiles, the color fidelity will be maintained by the color management system. If that's really what you want to do (i.e. you really want to do a soft proof, because you are targeting (say) a printer), then you control the source color space by your choice of source ICC profile. i.e. if you want the source to be a linear light RGB type space, then you need to create or use such a profile as the source profile. This is because the whole point of a color management system is to manage the color. Its purpose is to be closed loop control. So you provide a color, define what that color means by providing a color profile (the source profile) or use a device independent color encoding like XYZ or L*a*b*, and then the color management system takes care of faithfully conveying that color to the output device as much as is possible, without you having to know much about how that device behaves. Note that if you don't really wish to use a proofing transform, you would use the simpler cmsCreateTransform(), which converts between your source colorspace and your display. Hope this helps, Graeme Gill. |
From: Aurélien P. <re...@au...> - 2018-11-04 15:25:37
|
Hi, I'm working on the software darktable to enable a linear workflow (no gamma correction from the display, this is done by a log2 function internally), in order to visualize the data in the scene-referred space. To convert from internal Lab to display RGB (or other spaces, for image export), darktable uses : d->xform = cmsCreateProofingTransform(Lab, TYPE_LabA_FLT, output, output_format, softproof, out_intent, INTENT_RELATIVE_COLORIMETRIC, transformFlags); I'm looking for a way to keep the RGB primaries but remove the TCR/tonecurve from that xform in order to suppress the gamma correction. So far, I'm clueless. Is that possible ? Thank you, Aurélien. |
From: Graeme G. <gr...@ar...> - 2018-09-20 12:50:19
|
Richard Hughes wrote: > I think Graeme needs some convincing on v4. Sorry, highly unconvinced in any technical sense. I may get there eventually, but it's a long way down my priority list. Cheers, Graeme. |
From: Richard H. <hug...@gm...> - 2018-09-20 09:45:00
|
On Wed, 19 Sep 2018 at 21:30, Marti Maria <mar...@li...> wrote: > software that only accepts v2 profiles, maybe your should consider to upgrading to something more actual I get asked about supporting V2-only profiles in colord every few months for use in ArgyllCMS. I think Graeme needs some convincing on v4. Richard. |
From: Marti M. <mar...@li...> - 2018-09-19 20:29:21
|
<div dir='auto'><div><br><div><br><div class="elided-text">On 18 Sep 2018 10:27, Carles Llopis <car...@in...> wrote:<br type="attribution"><blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hello Martí,<br><div><br></div><div><blockquote><div><p>This happens on legacy profiles using TextDescriptionType as data container. We are talking about profiles generated on 1998, TWENTY years ago. <br></p></div></blockquote></div><div><div><p>This is not absolutely true. We are using an 3rd party ICC profile generation tool where we set output to be V2 profile, to maximise compatibility. Our users can decide then</p></div></div></div></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">V2 is an obsolete format which should be avoided in any case, see ICC notes:</div><div dir="auto">http://color.org/whyusev4.xalter<br></div><div dir="auto"><br></div><div dir="auto">There is no active lcms developement on v2 and will never be. This is also to discourage the usage of this old and problematic format. if you are using software that only accepts v2 profiles, maybe your should consider to upgrading to something more actual.</div><div dir="auto"><br></div><div dir="auto">Regards</div><div dir="auto">Marti</div><div dir="auto"><br></div><div dir="auto"></div></div> |
From: Martí M. <mar...@li...> - 2018-09-17 15:15:02
|
Hi, This happens on legacy profiles using TextDescriptionType as data container. We are talking about profiles generated on 1998, TWENTY years ago. The reason to choose ASCII on such old profiles is because in many sample profiles, the wide part was broken. Any modern V4 profile holding multilocalizedUnicode as data container will behave as you expect. Regards Marti On 9/17/2018 2:12 PM, Angel Sánchez wrote: > Hello folks! > > We are using LCMS to read some profile descriptions from images and > with this one looks like it can't read the Unicode part of the tag, > and instead reads the ASCII one. > > Here is the code we are using: > ------------ > wchar_t desc[2048]={0}; > > if (m_cmshProfile != NULL) > { > cmsMLU * pDescTag = (cmsMLU *) cmsReadTag(m_cmshProfile, > cmsSigProfileDescriptionTag); > > if (!cmsGetProfileInfo(m_cmshProfile, cmsInfoDescription, > cmsNoLanguage, cmsNoCountry, desc, sizeof(desc))) > return NULL; > } > ------------ > > In this case desc gets this characters: ASCII sRGB IEC61966-2.1 > And instead it should be Unicodé sRGB IEC61966-2.1 > > This happens on windows using Visual Studio 2017 and macOS. > > If I extract the ICC profile with ImageMagick and convert to xml with > IccXML ( https://sourceforge.net/projects/iccxml/ ), I can see the > following tags: > --------- > <textDescriptionType> > <TagSignature>desc</TagSignature> > <ASCII><![CDATA[ASCII sRGB IEC61966-2.1]]></ASCII> > <Unicode><![CDATA[Unicodé sRGB IEC61966-2.1]]></Unicode> > </textDescriptionType> > --------- > > Looks like it is getting the ASCII tag instead the Unicode one. > How we should read the Unicode tag? > > I have attached the ICC profile. > > Feel free to contact me for any questions, suggestions and advice. > > Thanks, > Angel > > > > > _______________________________________________ > Lcms-user mailing list > Lcm...@li... > https://lists.sourceforge.net/lists/listinfo/lcms-user |
From: Noel C. <NCa...@Pr...> - 2018-09-17 14:14:41
|
Hi Angel, I took your question as an opportunity to familiarize myself more with the Little CMS source code. Since you did not specify a language, this comment, from the internal implementation of _cmsMLUgetWide(), states that the first description found will be returned. In the case of your profile it's the "ASCII sRGB IEC61966-2.1" description. // The algorithm first searches for an exact match of country and language, if not found it uses // the Language. If none is found, first entry is used instead. Are you suggesting that the above code should be changed so that it chooses a wide character description over the narrow character one if the wide character cmsGetProfileInfo() function is used, and the narrow character description preferentially only if the cmsGetProfileInfoASCII() function is used? I suspect making such a change could break other software that already depends on the above-described behavior, though it's not explicitly documented either way in the manual. Only Marti can speak to whether design changes would make sense and fit his original goals. -Noel Carboni ProDigital Software From: Angel Sánchez [mailto:sal...@gm...] Sent: Mon, September 17, 2018 8:12 AM To: lcm...@li... Subject: [Lcms-user] ICC Profile description tag not read correctly Hello folks! We are using LCMS to read some profile descriptions from images and with this one looks like it can't read the Unicode part of the tag, and instead reads the ASCII one. Here is the code we are using: ------------ wchar_t desc[2048]={0}; if (m_cmshProfile != NULL) { cmsMLU * pDescTag = (cmsMLU *) cmsReadTag(m_cmshProfile, cmsSigProfileDescriptionTag); if (!cmsGetProfileInfo(m_cmshProfile, cmsInfoDescription, cmsNoLanguage, cmsNoCountry, desc, sizeof(desc))) return NULL; } ------------ In this case desc gets this characters: ASCII sRGB IEC61966-2.1 And instead it should be Unicodé sRGB IEC61966-2.1 This happens on windows using Visual Studio 2017 and macOS. If I extract the ICC profile with ImageMagick and convert to xml with IccXML ( https://sourceforge.net/projects/iccxml/ ), I can see the following tags: --------- <textDescriptionType> <TagSignature>desc</TagSignature> <ASCII><![CDATA[ASCII sRGB IEC61966-2.1]]></ASCII> <Unicode><![CDATA[Unicodé sRGB IEC61966-2.1]]></Unicode> </textDescriptionType> --------- Looks like it is getting the ASCII tag instead the Unicode one. How we should read the Unicode tag? I have attached the ICC profile. Feel free to contact me for any questions, suggestions and advice. Thanks, Angel |
From: Angel S. <sal...@gm...> - 2018-09-17 12:12:39
|
Hello folks! We are using LCMS to read some profile descriptions from images and with this one looks like it can't read the Unicode part of the tag, and instead reads the ASCII one. Here is the code we are using: ------------ wchar_t desc[2048]={0}; if (m_cmshProfile != NULL) { cmsMLU * pDescTag = (cmsMLU *) cmsReadTag(m_cmshProfile, cmsSigProfileDescriptionTag); if (!cmsGetProfileInfo(m_cmshProfile, cmsInfoDescription, cmsNoLanguage, cmsNoCountry, desc, sizeof(desc))) return NULL; } ------------ In this case desc gets this characters: ASCII sRGB IEC61966-2.1 And instead it should be Unicodé sRGB IEC61966-2.1 This happens on windows using Visual Studio 2017 and macOS. If I extract the ICC profile with ImageMagick and convert to xml with IccXML ( https://sourceforge.net/projects/iccxml/ ), I can see the following tags: --------- <textDescriptionType> <TagSignature>desc</TagSignature> <ASCII><![CDATA[ASCII sRGB IEC61966-2.1]]></ASCII> <Unicode><![CDATA[Unicodé sRGB IEC61966-2.1]]></Unicode> </textDescriptionType> --------- Looks like it is getting the ASCII tag instead the Unicode one. How we should read the Unicode tag? I have attached the ICC profile. Feel free to contact me for any questions, suggestions and advice. Thanks, Angel |
From: Thomas H. <tha...@t-...> - 2018-08-01 18:02:43
|
Hi, I have tried to build the LCMS as a library for iOS targets with all the ".c"-files and I get a linker error in the end: ld: entry point (_main) undefined for architecture arm64 What should I add (probably in a maim.m file) to get a valid library for iOS? Regards Thomas |
From: Mikhail E. <m...@em...> - 2018-06-05 17:07:49
|
I've found the answer, no help needed anymore. -- Mikhail > On 5 Jun 2018, at 21:02, Mikhail Emelchenkov via Lcms-user <lcm...@li...> wrote: > > Hello! > > I want to convert parametric curve of ICC v4 to 256 values curve table of ICC v2. Function is zero, y=x * lambda. Could you please tell how to calculate proper values? |
From: Mikhail E. <m...@em...> - 2018-06-05 16:20:14
|
Hello! I want to convert parametric curve of ICC v4 to 256 values curve table of ICC v2. Function is zero, y=x * lambda. Could you please tell how to calculate proper values? (IccXML output of ICC v4): <parametricCurveType> <TagSignature>rTRC</TagSignature> <ParametricCurve FunctionType="0"> 2.19447327 </ParametricCurve> </parametricCurveType> -- Mikhail |
From: Gonzalez C. J. <jor...@hp...> - 2018-05-11 12:39:24
|
I am using the little cms in python but when I want to use the cmsCIE94DeltaE(Lab1: 'cmsCIELab', Lab2: 'cmsCIELab') -> "cmsFloat64Number": function i get a argument 1 of type 'cmsCIELab const *'. What i do is the following: Import littlecms as lcms Color1 = lcms. cmsCIELab #The vàlues are an example Color1.L = 12.0 Color1.a = 14.0 Color1.b = 22.0 Color2 = lcms. cmsCIELab #The vàlues are an example Color2.L = 15.0 Color2.a = 14.0 Color2.b = 22.0 Distance = lcms.cmsCIE94DeltaE(Color1,Color2) |