2011-01-01 4 views
3

я хочу применить некоторые фильтры на BufferedImage, но не применять эти фильтры на весьприменить фильтр на выбранной области BufferedImage

из BufferedImage, мне нужно применить фильтр на прямоугольник, эллипс, выбора из

от руки

BufferedImage У кого-нибудь есть идея?

благодаря

ответ

4

См Graphics.setClip (Shape формы):

Graphics g = image.getGraphics(); 
g.setClip(shape); 

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


ниже код будет производить это изображение:

Examples of clips

public static void main(String[] args) throws Exception { 

    BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = (Graphics2D) image.getGraphics(); 

    // set "user defined" clip 
    g.setClip(new Polygon(
      new int[] { 50, 100, 50 }, 
      new int[] { 50, 50, 100 }, 
      3)); 
    g.fillRect(0, 0, 400, 400); 

    // set an ellipse 
    g.setClip(new Ellipse2D.Double(100, 100, 200, 200)); 
    g.fillRect(0, 0, 400, 400); 

    // set an rectangle 
    g.setClip(new Rectangle(300, 300, 50, 50)); 
    g.fillRect(0, 0, 400, 400); 

    g.dispose(); 
    ImageIO.write(image, "png", new File("test.png")); 
}