Шаблон заполнения меняется в зависимости от положения объекта. Джава - PullRequest
0 голосов
/ 02 мая 2010

Я создал изображение с буферизацией, которое я применил к прямоугольнику, чтобы использовать в качестве шаблона заполнения для формы S. Если я изменю положение S, шаблон заполнения изменяется вместе с ним, а не остается «фиксированным». Что бы это могло быть?

Изображение: (рисунок состоит из 3 полос с одинаковым соотношением сторон): альтернативный текст http://img88.imageshack.us/img88/8524/imageby.png

    if (bannerPatternCreated == false) {

        banner = new BufferedImage(size * 3, size * 3, BufferedImage.TYPE_INT_RGB);
        Graphics2D gc = banner.createGraphics();


        System.out.println("Creating banner...");

        gc.setColor(Color.black);
        gc.fillRect(0, 0, size, size * 3);

        gc.setColor(Color.BLUE);
        gc.fillRect(size, 0, size, size * 3);

        gc.setColor(Color.WHITE);
        gc.fillRect(size * 2, 0, size, size * 3);
        gc.dispose();
        bannerPatternCreated = true;

    }

    Rectangle patternPencil = new Rectangle(size, size);
    g2.setPaint(new TexturePaint(banner, patternPencil));

    Rectangle recto = new Rectangle(presentX-size, presentY-size, size, size);
    g2.fill(recto);

Ответы [ 2 ]

1 голос
/ 02 мая 2010

Похоже, что положение текстуры зафиксировано, и поэтому, когда вы перемещаете recto вокруг, вы просто получаете другое представление о лежащей в основе бесконечно повторяющейся текстуре.

Если вы измените patternPencilпрямоугольник будет того же размера / позиции, что и recto, я думаю, он должен быть отсортирован:

Rectangle patternPencil = new Rectangle(presentX-size, presentY-size, size, size);
0 голосов
/ 02 мая 2010

Я думаю, что документы TexturePaint указывают на причину проблемы:

... текстура привязана к верхний левый угол Rectangle2D это указано в пространстве пользователя. Текстура рассчитывается для мест в пространство устройства концептуально репликация указанного Rectangle2D бесконечно во всех направлениях

Это как если бы вы были прямоугольником, нарисованным из 0,0 и повторяющимся снова и снова, и видимыми частями являются маленькие "окна", которые открываются при вызове g2.fill.

Если вы рисуете на компонент типа Canvas, не могли бы вы просто использовать один из Graphics.drawImage методов в соответствующем x, y?

...