Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8074181

drawrenderedImage with Affine Transform works in java 1.7, but not 1.8

    • 2d
    • x86_64
    • linux

      FULL PRODUCT VERSION :
      java -version
      'openjdk version "1.8.0_25"

      but works OK with jdk1.7.0_71

      ADDITIONAL OS VERSION INFORMATION :
      Linux 3.17.7-300.fc21.x86_64



      EXTRA RELEVANT SYSTEM CONFIGURATION :
      java rendering via ssh -Y on X11 (Xquartz) to OSX (but unlikely to matter).
      I guess (but haven't tried) it will show under any X11.

      A DESCRIPTION OF THE PROBLEM :
      Rendering of images via AffineTransform doesn't seem to work: renders only
      small rectangle.
      Key line is drawRenderedImage(image, affineTransform)

      Easy Test code below works ok in java 1.7, but not 1.8.


      REGRESSION. Last worked in version 7u71

      ADDITIONAL REGRESSION INFORMATION:
      'openjdk version "1.8.0_25"

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      compile & run code . Makes simple graded colour rectangle from corner to corner. Doesn't work in java 1.8 (on linux being rendered on Xquartz.)
      But works fine using java 1.7
      Code is fine on OSX's java using native cocoa graphics.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      As above
      ACTUAL -
      Wierd sub-square only rendered in java 1.8.
      In 1.7, all of rectangle is rendered.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      mport javax.swing.*;
      import java.io.*;
      import java.awt.*;
      import java.awt.image.*;
      import javax.imageio.*;
      import java.awt.geom.AffineTransform;

      public class ImageBug extends JPanel
      {
        BufferedImage BIS;
        int n=100;
        int width=700,height=400;

        public static void main(String [] args)
        {
      ImageBug IB = new ImageBug();
      JFrame f = new JFrame("Window");
      f.add(IB);
      f.setSize(IB.width,IB.height);
      f.setVisible(true);
      IB.BIS = new BufferedImage(IB.n,IB.n,BufferedImage.TYPE_INT_RGB);
        }

        public void paint(Graphics g)
        {
      int j,k;
      for(j=0;j<n;j++)
      for (k=0;k<n;k++) BIS.setRGB(j,k,j%255+(k%255)<<8);
      // paint image
      AffineTransform at = AffineTransform.getScaleInstance(width/(double)n,height/(double)n);
      ((Graphics2D)g).drawRenderedImage(BIS,at);
        }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      None so far

            prr Philip Race
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: