Hi Alex,

 

Please review updated patch as per review comments.

http://cr.openjdk.java.net/~pkbalakr/8162959/webrev.06/  

 

Automated test validates both Robot.getPixelColor() and output of 
Robot.createScreenCapture() API's.

 

Jtreg and JCK tests passed on build with fix across all the platforms(Mac, 
Windows and Linux) without causing any regression.

 

Regards,

Prem

 

From: Alexandr Scherbatiy 
Sent: Thursday, January 12, 2017 2:39 PM
To: Prem Balakrishnan; Sergey Bylokhov; awt-dev@openjdk.java.net; Philip Race
Subject: Re: Review Request JDK:-8162959 [HiDPI] screenshot artifacts using AWT 
Robot

 


> 421      * @param   isHiDPI     Indicates if HiDPI Display

  There should be mention that this argument value is ignored when a screenshot 
is taken on non-HiDPI display

Please also check the the method Robot.getPixelColor(int x, int y) also 
correctly works on Mac OS X, Windows and Linux after the fix.

Thanks,
Alexandr.

On 1/10/2017 11:54 AM, Prem Balakrishnan wrote:

Hi Alex,

 

Please review updated patch,

HYPERLINK 
"http://cr.openjdk.java.net/%7Epkbalakr/8162959/webrev.05/"http://cr.openjdk.java.net/~pkbalakr/8162959/webrev.05/

 

updated imageOption to kCGWindowImageBestResolution  which returns Best 
Resolution Image while capturing screen using CGWindowListCreateImage() method.

 

Regards,

Prem

 

 

 

From: Alexandr Scherbatiy 
Sent: Tuesday, January 10, 2017 1:08 AM
To: Prem Balakrishnan; Sergey Bylokhov; HYPERLINK 
"mailto:awt-dev@openjdk.java.net"awt-dev@openjdk.java.net; Philip Race
Subject: Re: Review Request JDK:-8162959 [HiDPI] screenshot artifacts using AWT 
Robot

 


  CGWindowListCreateImage() method which is used to capture a screenshot on Mac 
OS X by Robot has imageOption argument which can have value: 
kCGWindowImageBestResolution
    
https://developer.apple.com/reference/coregraphics/1666230-quartz_window_services/window_image_types?language=objc
   "When capturing the window, return the best image resolution. The returned 
image size may be different than the screen size."

  Could this option help to get a high-resolution CGImageRef on HiDPI display?

  Thanks,
  Alexandr.

On 12/27/2016 12:14 PM, Prem Balakrishnan wrote:

Hi Alexander,

 

Please review updated patch,

HYPERLINK 
"http://cr.openjdk.java.net/%7Epkbalakr/8162959/webrev.04/"http://cr.openjdk.java.net/~pkbalakr/8162959/webrev.04/
 

I used  wrong bounds while creating images, correct it in this patch.

 

Regards,

Prem

 

From: Alexander Scherbatiy 
Sent: Wednesday, December 14, 2016 5:18 PM
To: Prem Balakrishnan; Sergey Bylokhov; HYPERLINK 
"mailto:awt-dev@openjdk.java.net"awt-dev@openjdk.java.net; Philip Race
Subject: Re: Review Request JDK:-8162959 [HiDPI] screenshot artifacts using AWT 
Robot

 

On 07/12/16 10:24, Prem Balakrishnan wrote:





Hi Alexander,

 

Please review updated patch as per review comments.

HYPERLINK 
"http://cr.openjdk.java.net/%7Epkbalakr/8162959/webrev.03/"http://cr.openjdk.java.net/~pkbalakr/8162959/webrev.03/

  I used a simple app [1] to create a screenshot of a frame on Mac OS X:
        Rectangle rect = frame.getBounds();
        rect.setLocation(frame.getLocationOnScreen());
        BufferedImage img = robot.createScreenCapture(rect);

  It takes only bottom right quarter of the frame [2].

  Is it possible to use some API that makes a screenshot and returns an NSImage 
on Mac OS X?
  In this case it would be possible to get a high resolution representation 
from the NSImage and return it in the same way as it is updated on Windows and 
Linux.

  [1] HYPERLINK 
"http://cr.openjdk.java.net/%7Ealexsch/8162959/screenshot/RobotScreenshot.java"http://cr.openjdk.java.net/~alexsch/8162959/screenshot/RobotScreenshot.java
  [2] HYPERLINK 
"http://cr.openjdk.java.net/%7Ealexsch/8162959/screenshot/screenshot.png"http://cr.openjdk.java.net/~alexsch/8162959/screenshot/screenshot.png

  Thanks,
  Alexandr.





 

Regards,

Prem

 

 

From: Alexandr Scherbatiy 
Sent: Monday, November 21, 2016 8:10 PM
To: Prem Balakrishnan; Sergey Bylokhov; HYPERLINK 
"mailto:awt-dev@openjdk.java.net"awt-dev@openjdk.java.net; Phil Race
Subject: Re: Review Request JDK:-8162959 [HiDPI] screenshot artifacts using AWT 
Robot

 

On 11/16/2016 8:46 AM, Prem Balakrishnan wrote:






Hi Alexander, 

 

Please review update patch as per review comments.

HYPERLINK 
"http://cr.openjdk.java.net/%7Epkbalakr/8162959/webrev.02/"http://cr.openjdk.java.net/~pkbalakr/8162959/webrev.02/

 

With this patch, Robot.createScreenCapture(Rectangle) method returns a scaled 
down image on the HiDPI display.


- The native part on Mac OS X and Linux should be updated as well.

- 416      * Returns BufferedImage for Non-HiDPI display and 
MultiResolutionImage 
  417      * for HiDPI display with two resolution variants.

There should be added an explanation what is the content of the first and the 
second resolution variant.

Thanks,
Alexandr.







 

Regards,

Prem

 

From: Alexandr Scherbatiy 
Sent: Thursday, November 03, 2016 4:05 PM
To: Prem Balakrishnan; Sergey Bylokhov; HYPERLINK 
"mailto:awt-dev@openjdk.java.net"awt-dev@openjdk.java.net
Subject: Re: Review Request JDK:-8162959 [HiDPI] screenshot artifacts using AWT 
Robot

 

On 11/2/2016 1:57 PM, Prem Balakrishnan wrote:







Hi Alexander,

 

Please review updated patch.

HYPERLINK 
"http://cr.openjdk.java.net/%7Epkbalakr/8162959/webrev.01/"http://cr.openjdk.java.net/~pkbalakr/8162959/webrev.01/

 

Added a new public API "Image createHiDPIScreenCapture(Rectangle screenRect)".

Returns an ordinary screenshot(BufferedImage) if the UI scale is 1.

 

Returns MultiResolutionImage for HiDPI display with two resolution variants,

1.       Low Resolution/base image with user input width and height,  I have 
used interpolation algorithm for scaling , adapted from JavaFX Robot 
(http://hg.openjdk.java.net/openjfx/9-dev/rt/rev/89a5de54b7dc),

2.       High Resolution image with scaled width and height .

  - Please, check that the Robot.createScreenCapture(Rectangle) method returns 
a scaled down image on the HiDPI display
  - Probably existing Java methods can be used for an image scaling.
  For example, there is the Image.getScaledInstance(int width, int height, int 
hints) method.
  Or may be it is better just to create an image with required size and draw 
the high-resolution image into it using a specific scale and rendering hints.

  Thanks,
  Alexandr.








 

Regards,

Prem

 

From: Alexander Scherbatiy 
Sent: Thursday, October 13, 2016 3:21 PM
To: Prem Balakrishnan; Sergey Bylokhov; HYPERLINK 
"mailto:awt-dev@openjdk.java.net"awt-dev@openjdk.java.net
Subject: Re: Review Request JDK:-8162959 [HiDPI] screenshot artifacts using AWT 
Robot

 

On 06/10/16 15:28, Prem Balakrishnan wrote:

Hi,

 

 

Please review fix for JDK 9, 

 

Bug: https://bugs.openjdk.java.net/browse/JDK-8162959 

Webrev: HYPERLINK 
"http://cr.openjdk.java.net/%7Epkbalakr/8162959/webrev.00/"http://cr.openjdk.java.net/~pkbalakr/8162959/webrev.00/
 

 

I have adapted the same fix as used for JavaFX Robot 

Bug: HYPERLINK "https://bugs.openjdk.java.net/browse/JDK-8162783"JDK-8162783.

Patch: http://hg.openjdk.java.net/openjfx/9-dev/rt/rev/89a5de54b7dc

 

 

New Public API " BufferedImage createScreenCapture(Rectangle screenRect, 
boolean isHiDPI)" is added,
Which will have a parameter to specify if HiDPI.

  It is better to a add public method which returns MultiResolution image on 
HiDPI display and  consists of two resoltion variants
   - base image which has size requested by a user
   - high-resolution image which creates an original screen capture
  
  The proposed by your algorithm can be applied to the base image. 
  For more details see JDK-8020618 [macosx] java.awt.Robot makes blurry screen 
captures on Retina 

  Thanks,
  Alexandr.








 
Regards,
Prem
 

 

 

 

 

 

 

 

 

Reply via email to