<AWT Dev> [11] JDK-8169187: [macosx] Aqua: java/awt/image/multiresolution/MultiresolutionIconTest.java
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Sun May 13 06:34:27 UTC 2018
On 12/05/2018 21:47, shashidhara.veerabhadraiah at oracle.com wrote:
> Hi Sergey, Small correction. If the HiDpi factor is 3, then assuming
> uniform scaling on x and y, it will be a 3 * 3 area representing a
> single coordinate point. getPixelColor() will always pick the first
> point color but the createScreenCapture() would pick the closest one
> pixel among the 3 * 3.
But getPixelColor() will return the real pixel which was painted by the
test on the screen. If the test will draw blue/red square then
getPixelColor() should return blue/red pixel(even if it was the first
left/top pixel in the point).
>
> Thanks and regards,
>
> Shashi
>
>
> On 12/05/18 9:45 PM, shashidhara.veerabhadraiah at oracle.com wrote:
>> Hi Sergey, I read that slightly different. The getPixelColor() would
>> not be accurate but createScreenCapture() works differently but
>> advantageous to us. The reason for that is that if we have a HiDpi
>> factor screen of say 3, then actually 3 sub pixels forms each
>> particular location. The getPixelColor() would always choose the first
>> pixel(0th) whereas createScreenCapture() since it converts to low res
>> image using the nearest neighbor, it would choose the color of the
>> most nearest point for that particular location.
>>
>> We don't need the information of the 3 pixel color info but since the
>> limitation of getPixelColor() is that it can return only one color and
>> that color should actually be closest to that particular location. But
>> instead we always return the first pixel color. On the other hand,
>> createScreenCapture() would choose the closest pixel out of the 3
>> pixel color info, which is required in our case.
>>
>> This is what I felt out of the 2 ways, please let me know what do you
>> think of this.
>>
>> Thanks and regards,
>>
>> Shashi
>>
>>
>> On 12/05/18 4:38 AM, Sergey Bylokhov wrote:
>>> Hi, Shashi.
>>> It means that the updated test will not trust getPixelColor() which
>>> returns exact color which is drawn on the screen, but will trust
>>> createScreenCapture() which will apply transformation of the actual
>>> color. This looks odd.
>>>
>>> On 11/05/2018 00:45, shashidhara.veerabhadraiah at oracle.com wrote:
>>>> 1. In this case we will be using the low resolution variant of the
>>>> image that was captured.
>>>>
>>>> 2. The low resolution variant was created from the high resolution
>>>> image that was actually captured from an high res display. This is
>>>> done using the nearest neighbor interpolation which actually chooses
>>>> the most nearest point's value and ignores the other points values
>>>> completely.
>>>>
>>>> This may be a reason to get a different color for the said pixel.
>>>>
>>>>
>>>> By using the getPixelColor():
>>>>
>>>> 1. This calls the getRGBPixel().
>>>>
>>>> 2. Here we return only the 0th pixel color ignoring the scaling
>>>> effect in the case of hidpi display units, where there may be many
>>>> sub pixels for the given user space coordinates.
>>>>
>>>> This may be the reason for getting failed here.
>>>>
>>>>
>>>> Thanks and regards,
>>>>
>>>> Shashi
>>>>
>>>>
>>>> On 11/05/18 2:39 AM, Sergey Bylokhov wrote:
>>>>> Hi, Shashi.
>>>>>
>>>>> On 10/05/2018 08:40, Shashidhara Veerabhadraiah wrote:
>>>>>> The test was failing because of the color value mismatches, the
>>>>>> fix is to get an image of the part of the window for which color
>>>>>> needs to be fetched from the image pixel.
>>>>>
>>>>> Can you please clarify why r.getPixelColor(x, y) returns incorrect
>>>>> color and r.createScreenCapture(bouns{x,y,1,1}) will work, since
>>>>> internally both of these methods are use the same method
>>>>> CRobot.getRGBPixels()
>>>>>
>>>>
>>>
>>>
>>
>
--
Best regards, Sergey.
More information about the awt-dev
mailing list