On Tue, 18 Mar 2025 17:07:56 GMT, Harshitha Onkar <hon...@openjdk.org> wrote:

>> If we start from the beginning. The problem we are trying to solve is 
>> preventing changes to our standard profiles so that we can be sure one part 
>> of the application does not unexpectedly affect another. This could be 
>> achieved in two ways:
>> 
>> - Throw an exception if a standard profile is modified
>> - Ignore the requested change and use the default profile properties as is
>> 
>> For new applications, we could require always cloning the color profile 
>> before modification (via the updated specification); otherwise, the 
>> application must always check whether the profile is built-in or not.
>> 
>> However, for older applications, these two solutions lead to different 
>> outcomes:
>> 
>> - Throwing the new exception will most likely break the application
>> - Ignoring the data change allows the application to continue working, but 
>> the color conversion result may not be fully accurate
>> 
>> The next question is: how big of an issue is this inaccuracy? For example, 
>> if we have an sRGB profile that rejects some modifications, we would still 
>> try to produce valid sRGB data during conversion.
>> 
>> So the trade-off is: broken applications vs. inaccurate (but still 
>> ICC-spec-compliant) conversions.
>> 
>> PS: By the way, why do we want to enforce this rule only for built-in 
>> profiles? Why can't a library create similar profiles and mark them as 
>> "read-only"?
>
> @mrserb 
> 
>> The app may obtain a profile from some place and use it for some images or 
>> pixels. Then, if the app wants to tweak the rendering intent for some 
>> reason, what should it do?
>> 
>> Clone the profile and then change the intent?
> 
> The app would follow the above approach.
> There is only one step extra with this fix - creating a copy of built-in 
> profile and then modifying it.
> 
> 
> byte[] builtInData = ICC_Profile.getInstance(ColorSpace.CS_sRGB).getData(); 
> // get the byte array representation of BuiltIn- profile
> ICCProfile newProfile = ICC_Profile.getInstance(builtInData) // create a new 
> profile
> newProfile.setData(...)
> 
> 
> 
>> However, for older applications, these two solutions lead to different 
>> outcomes:
>> Throwing the new exception will most likely break the application
> 
> The chances of breaking an existing application is minimal since API usage 
> for setData() was checked and not many were found and moreover they were not 
> called on built-in profiles.
> 
> 
>>Ignoring the data change allows the application to continue working, but the 
>>color conversion result may not be fully accurate
> 
> This does not seem viable option because the user in unaware as to whether 
> setData() worked or not.

ok, it might be useful to mention this in the release notes.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/23606#discussion_r2006347247

Reply via email to