2016-06-14 8 views
0

У меня есть четырехугольник, нарисованный в Path2D, и я хотел бы, чтобы на нем было изображение. В частности, я пытаюсь сделать изображение своего выбора в 4 разных точках на четырехугольниках. В моем случае это параллелограмм. Я не хочу, чтобы изображение проходило через параллеллограмму. Лучший способ увидеть, что я пытаюсь сказать, - увидеть снимок экрана ниже.Рисование изображений в 4 разных точках

Я хочу, чтобы изображение было преобразовано в соответствии с зеленой зоной. Не обрезается.

screenshot

Я хочу, чтобы изображение прикалываться над зеленым paralellogram. Однако. Я не хочу, чтобы изображение переходило в синюю параллеллограмму, или в белую область, которая имеет значение.

До сих пор я пытался

  • Исследуя способ поместить изображения непосредственно на Path2D.Double() объектов. Нет ответа
  • Вращение изображения в соответствии с параллеллограммой. Не работает.
  • Использование AffineTransform в java. Не получилось;

Спасибо. Я новичок в java, поэтому стараюсь быть снисходительным?

+0

Вы хотите скопировать изображение? Вы хотите преобразовать изображение в соответствии с зеленой зоной? – markbernard

+0

Я бы хотел, чтобы изображение было преобразовано в соответствии с зеленой зоной. @markbernard – Colourfit

ответ

2

Один из способов заключается в следующем:

  1. создать отдельную BufferedImage.
  2. Применить преобразование к новому изображению.
  3. Нарисуйте свое изображение на этом новом изображении.
  4. Используйте объект Shape для зеленой зоны как клип на основной области чертежа
  5. Нарисуйте преобразованное изображение на главную область рисования.

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

public void paintComponent(Graphics g) { 
    Graphics2D g2 = (Graphics2D)g; 
    g2.transform(AffineTransform.getShearInstance(1.0, 0)); 
    g2.drawImage(image, 0, 0, this); 
} 

Вот простой пример того, как работают преобразования. Вам придется потратить некоторое время на выяснение того, какие значения вам нужны, чтобы заставить его работать, или вам может понадобиться вручную создать матрицу преобразования самостоятельно.

+0

Можете ли вы привести пример кода, чтобы показать мне, как это сделать? Это именно то, что я хочу, но не знаю, как это сделать:/ – Colourfit

+0

«применить преобразование». Какое преобразование? Как? и «главная область рисования», что это? Дополнительная информация пожалуйста. – Colourfit

+0

@JammehCarr Я добавил пример кода о том, как использовать преобразования. Обратите внимание, что для этого требуется объект Graphics2D, который всегда предоставляется. – markbernard