494 495 int[] bandmasks = new int[3]; 496 bandmasks[0] = screenCapCM.getRedMask(); 497 bandmasks[1] = screenCapCM.getGreenMask(); 498 bandmasks[2] = screenCapCM.getBlueMask(); 499 500 // need to sync the toolkit prior to grabbing the pixels since in some 501 // cases rendering to the screen may be delayed 502 Toolkit.getDefaultToolkit().sync(); 503 504 GraphicsConfiguration gc = GraphicsEnvironment 505 .getLocalGraphicsEnvironment() 506 .getDefaultScreenDevice(). 507 getDefaultConfiguration(); 508 gc = SunGraphicsEnvironment.getGraphicsConfigurationAtPoint( 509 gc, screenRect.getCenterX(), screenRect.getCenterY()); 510 511 AffineTransform tx = gc.getDefaultTransform(); 512 double uiScaleX = tx.getScaleX(); 513 double uiScaleY = tx.getScaleY(); 514 int pixels[]; 515 516 if (uiScaleX == 1 && uiScaleY == 1) { 517 518 pixels = peer.getRGBPixels(screenRect); 519 buffer = new DataBufferInt(pixels, pixels.length); 520 521 bandmasks[0] = screenCapCM.getRedMask(); 522 bandmasks[1] = screenCapCM.getGreenMask(); 523 bandmasks[2] = screenCapCM.getBlueMask(); 524 525 raster = Raster.createPackedRaster(buffer, screenRect.width, 526 screenRect.height, screenRect.width, bandmasks, null); 527 SunWritableRaster.makeTrackable(buffer); 528 529 highResolutionImage = new BufferedImage(screenCapCM, raster, 530 false, null); 531 imageArray = new BufferedImage[1]; 532 imageArray[0] = highResolutionImage; 533 534 } else { 535 536 int sX = (int) Math.floor(screenRect.x * uiScaleX); 537 int sY = (int) Math.floor(screenRect.y * uiScaleY); 538 int sWidth = (int) Math.ceil(screenRect.width * uiScaleX); 539 int sHeight = (int) Math.ceil(screenRect.height * uiScaleY); 540 int temppixels[]; 541 Rectangle scaledRect = new Rectangle(sX, sY, sWidth, sHeight); 542 temppixels = peer.getRGBPixels(scaledRect); 543 544 // HighResolutionImage 545 pixels = temppixels; 546 buffer = new DataBufferInt(pixels, pixels.length); 547 raster = Raster.createPackedRaster(buffer, scaledRect.width, 548 scaledRect.height, scaledRect.width, bandmasks, null); 549 SunWritableRaster.makeTrackable(buffer); 550 551 highResolutionImage = new BufferedImage(screenCapCM, raster, 552 false, null); 553 554 555 // LowResolutionImage 556 lowResolutionImage = new BufferedImage(screenRect.width, 557 screenRect.height, highResolutionImage.getType()); 558 Graphics2D g = lowResolutionImage.createGraphics(); 559 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 560 RenderingHints.VALUE_INTERPOLATION_BILINEAR); | 494 495 int[] bandmasks = new int[3]; 496 bandmasks[0] = screenCapCM.getRedMask(); 497 bandmasks[1] = screenCapCM.getGreenMask(); 498 bandmasks[2] = screenCapCM.getBlueMask(); 499 500 // need to sync the toolkit prior to grabbing the pixels since in some 501 // cases rendering to the screen may be delayed 502 Toolkit.getDefaultToolkit().sync(); 503 504 GraphicsConfiguration gc = GraphicsEnvironment 505 .getLocalGraphicsEnvironment() 506 .getDefaultScreenDevice(). 507 getDefaultConfiguration(); 508 gc = SunGraphicsEnvironment.getGraphicsConfigurationAtPoint( 509 gc, screenRect.getCenterX(), screenRect.getCenterY()); 510 511 AffineTransform tx = gc.getDefaultTransform(); 512 double uiScaleX = tx.getScaleX(); 513 double uiScaleY = tx.getScaleY(); 514 int[] pixels; 515 516 if (uiScaleX == 1 && uiScaleY == 1) { 517 518 pixels = peer.getRGBPixels(screenRect); 519 buffer = new DataBufferInt(pixels, pixels.length); 520 521 bandmasks[0] = screenCapCM.getRedMask(); 522 bandmasks[1] = screenCapCM.getGreenMask(); 523 bandmasks[2] = screenCapCM.getBlueMask(); 524 525 raster = Raster.createPackedRaster(buffer, screenRect.width, 526 screenRect.height, screenRect.width, bandmasks, null); 527 SunWritableRaster.makeTrackable(buffer); 528 529 highResolutionImage = new BufferedImage(screenCapCM, raster, 530 false, null); 531 imageArray = new BufferedImage[1]; 532 imageArray[0] = highResolutionImage; 533 534 } else { 535 536 int sX = (int) Math.floor(screenRect.x * uiScaleX); 537 int sY = (int) Math.floor(screenRect.y * uiScaleY); 538 int sWidth = (int) Math.ceil(screenRect.width * uiScaleX); 539 int sHeight = (int) Math.ceil(screenRect.height * uiScaleY); 540 int[] temppixels; 541 Rectangle scaledRect = new Rectangle(sX, sY, sWidth, sHeight); 542 temppixels = peer.getRGBPixels(scaledRect); 543 544 // HighResolutionImage 545 pixels = temppixels; 546 buffer = new DataBufferInt(pixels, pixels.length); 547 raster = Raster.createPackedRaster(buffer, scaledRect.width, 548 scaledRect.height, scaledRect.width, bandmasks, null); 549 SunWritableRaster.makeTrackable(buffer); 550 551 highResolutionImage = new BufferedImage(screenCapCM, raster, 552 false, null); 553 554 555 // LowResolutionImage 556 lowResolutionImage = new BufferedImage(screenRect.width, 557 screenRect.height, highResolutionImage.getType()); 558 Graphics2D g = lowResolutionImage.createGraphics(); 559 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 560 RenderingHints.VALUE_INTERPOLATION_BILINEAR); |