По сути, вам нужно:
- Создать BufferedImage и связать его с графическим объектом
- Установить область отсечения
- Нарисовать эту графикуobject
- Применение фильтра к объекту BufferedImage
В псевдокоде:
private BufferedImage bufferedImage = new BufferedImage()
private Graphics2D graphics = bufferedImage.createGraphics()
void paint(Graphics2D input) {
graphics.clip(selectionArea.getShape())
upperCanvas.paint(graphics)
BufferedImageOp op
bufferedImage = op.filter(bufferedImage, new BufferedImage())
input.drawImage(bufferedImage)
}
Для применения фильтра см. java.awt.image
Как видите, это можно сделать в java2d, но API довольно сложный.Если вам интересно, я могу предложить pulpcore в качестве замены каркаса.Он включает в себя несколько предопределенных фильтров и однострочный API для их применения.Смотрите демо .Также включает класс Java2DSprite для удобного переноса между pulpcore и java2d.