我总是做类似这样的事情:
public BufferedImage diagonalBlur(int range, int angle)
{
BufferedImage b = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g = b.createGraphics();
for(int x = 0; x < main_image.getWidth(); x++)
{
for(int y = 0; y < main_image.getHeight(); y++)
int red[] = new int[range * 2], green[] = new int[range * 2], blue[] = new int[range * 2];
int pixels[] = new int[range * 2];
for(int i = 0; i < pixels.length; i++)
{
pixels[i] = main_image.getRGB(clamp(x - clamp(range / 2, 0, range) + i, 0, main_image.getWidth() - 1), clamp(y - clamp(range / 2, 0, range) + (int)(i * Math.toRadians(angle)), 0, main_image.getHeight() - 1));
red[i] = (pixels[i] >> 16) & 0xff;
green[i] = (pixels[i] >> 8) & 0xff;
blue[i] = (pixels[i]) & 0xff;
}
int red_t = 0, green_t = 0, blue_t = 0;
for(int i = 0; i < pixels.length; i++)
{
red_t += red[i];
green_t += green[i];
blue_t += blue[i];
}
int r = red_t / (range * 2);
int gr = green_t / (range * 2);
int bl = blue_t / (range * 2);
g.setColor(new Color(r, gr, bl));
g.fillRect(x, y, 1, 1);
}
}
g.dispose();
return b;
然后,做一些类似于以下的事情:
public static void main(String a[])
{
File f = new File("path");
try{
ImageIO.write(diagonalBlur(10, 69), "png", f);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
这将把文件保存为BufferedImage。当然,您需要一个图像的引用。
在代码中,我使用了main_image,但那是我之前创建的变量:
public BufferedImage main_image;
我使用以下代码来启动它
try
{
main_image = ImageIO.read(new File("path"));
}
catch(IOException e)
{
e.printStackTrace();
}
在主方法中。
添加一些JFrame代码,使我能够做到这一点:
模糊
如果你想要高斯模糊,你只需要将
red
,
green
,
blue
和
pixels
变量设置为二维数组,并在y轴上重复该过程。
希望我能帮到你。
int size = radius * 2 + 1;
替换为实际值,并观察更改此值是否会改变模糊框,会发生什么? - npinti