1 /*
   2  * @test %W% %E%
   3  * @bug 7016495
   4  * @summary Test tiny scales of BufferedImage
   5  */
   6 
   7 import java.awt.*;
   8 import java.awt.geom.*;
   9 import java.awt.image.*;
  10 
  11 public class TinyScale {
  12     static double tinyscales[] = {
  13         1E-0,
  14         1E-1,
  15         1E-2,
  16         1E-3,
  17         1E-4,
  18         1E-5,
  19         1E-6,
  20         1E-7,
  21         1E-8,
  22         1E-9,
  23         1E-10,
  24         1E-11,
  25         1E-12,
  26         1E-13,
  27         1E-14,
  28         1E-15,
  29         1E-16,
  30         1E-17,
  31         1E-18,
  32         1E-19,
  33         1E-20,
  34         1E-21,
  35         1E-22,
  36         1E-23,
  37         1E-24,
  38         1E-25,
  39         1E-26,
  40         1E-27,
  41         1E-28,
  42         1E-29,
  43     };
  44 
  45     static void test(BufferedImage rendImg, BufferedImage drawImg, double s) {
  46         Graphics2D g = drawImg.createGraphics();
  47         g.transform(new AffineTransform(s, 0.0, -1.0, 1.0, 0.0, 0.0));
  48         g.drawImage(rendImg,
  49                     -rendImg.getWidth() / 2,
  50                     -rendImg.getHeight() / 2,
  51                     null);
  52         g.drawImage(rendImg, 0, 0, null);
  53         g.dispose();
  54     }
  55 
  56     public static void main(String[] args) {
  57         BufferedImage rendImg =
  58             new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR);
  59         BufferedImage drawImg =
  60             new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
  61         for (double s: tinyscales) {
  62             test(rendImg, drawImg, s);
  63             for (int i = 0; args.length > 0 && i < 10; i++) {
  64                 test(rendImg, drawImg, Math.random()*s);
  65             }
  66         }
  67     }
  68 }