我在做的这个截图程序,我想截圆形图片。
画圆的时候有drawoval 可是保存的时候怎么保存圆形图片,
如果没有保存圆形图片的功能,我保存一个矩形,圆内切它
那现在怎么消除圆之外的像素点呢
大神们帮帮忙撒

解决方案 »

  1.   

    背景透明。        BufferedImage source = ... ;
            final int width = source.getWidth();
            final int height = source.getHeight();
            BufferedImage target = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d = target.createGraphics();
            g2d.setPaint(new Color(0,0,0,255));
            g2d.fillRect(0,0,width,height);        Shape shape = new Ellipse2D.Double(0,0,width,height);
            g2d.clip(shape);
            g2d.drawImage(source,null,0,0);
            g2d.dispose();
            ImageIO.write(target,"PNG",new File("..."));
      

  2.   

            g2d.setPaint(new Color(0,0,0,255));
    =>      g2d.setPaint(Color.WHITE);上面的代码中图片只有Ellipse2D内部的部分。
      

  3.   

    如果你已经截取了包含了圆的最小矩形图形,则自己编个程序就可去掉圆以外的部分图形,
    1. 设最小矩形的左上、右下角坐标分别为(xl,yt)、(xr,yb),
    2. 根据左上、右下角坐标,找矩形中心坐标:xo=(xl+xr)/2,yo=(yt+yb)/2,
    3. 显然(xo,yo)就是圆形坐标,而(x2-x1)/2 是圆的半径r,因此
    4. 从上到下、从左到右搜索矩形每个像素(x,y),当
           (x-xo)*(x-xo)+(y-yo)*(y-yo) > r*r
      时就是园外点,将此像素改成白色,就行了。
      

  4.   

    抱歉,第3条应为:
    3. 显然(xo,yo)就是圆的中心坐标,而(x2-x1)/2 是圆的半径r,因此
      

  5.   


    将(x,y)点颜色改成白色:
     canvas.pixels[x,y]:=clwhite;