Результат преобразования Graphics2D не соответствует преобразованию вручную

Я использую Java Graphics2D для рисования компонента с использованием AffineTransform для управления моим рисунком. Graphics2D предлагает для этого преобразование метода, которое принимает AffineTransform.

Иногда мне нужно манипулировать точкой вручную, не используя встроенное преобразование -. Но когда я пытаюсь преобразовать точку, используя то же преобразование, которое я дал Graphics2D.transform, иногда результирующая точка не совпадает.

Следующий код воспроизводит проблему (Это код Scala, но я думаю, вы можете представить код Java.):

   var transformationMatrix = new AffineTransform()
   /*
    * transformationMatrix is modified throughout the program
    *...
    */
   override def paintComponent(g: Graphics2D) = {
      super.paintComponent(g)
      /* 1. transform using graphics transform */
      g.transform(transformationMatrix)
      g.setColor(Color.RED)
      g.fill(new Rectangle(0, 0, 1, 1))
      /* 2. transform point manually */
      g.setTransform(new AffineTransform) // reset transformation to standard
      val p0 = new Point(0, 0)
      val pDest = new Point()
      transformationMatrix.transform(p0, pDest)
      g.setColor(Color.BLUE)
      g.fill(new Rectangle(pDest.x, pDest.y, 1, 1)
   }

Ожидаемое поведение

Синий прямоугольник (, рассчитанный вручную ), перерисовывает красный прямоугольник (, рассчитанный преобразованием ).

Опытное поведение

The blue rectangle has an offset of 1

Я признаю, что моя матрица трансформации не является целочисленной, но это не должно быть проблемой, не так ли?

   affineTransform = 1.1, 0.0, 520.55
                     0.0, 1.1, 182.54999999999995
                     0.0, 0.0,    1.0

Это ошибка или мне не хватает глубокого понимания?

Изменить:Вы можете воспроизвести ошибку, если установите для свойства трансформацииMatrix значение

transformationMatrix = new AffineTransform(1.1, 0.0, 0.0, 1.1, 521.55, 183.54999999999995)

. в начале paintComponent. Обратите внимание, что g имеет тип Graphics2D.

7
задан knub 18 July 2012 в 09:18
поделиться