如何解决通过 WritableRaster 类和 setSample 方法将 Java“渐变框架效果”转换为 BufferedImage
我需要一个建议:我想知道,一般来说,获得应用于 BufferedImage 的“渐变框架效果”的算法,操作图像的 Raster(WritableRaster 类和 setSample 方法)。例如,我有这张图片:
输入:
我想得到这个:
渐变框架效果:
我该如何继续?
解决方法
您可以使用 AlphaComposite
以适当的透明度/不透明度在原始图像的顶部进行绘制,从而为边框提供不同的效果。
RadialGradientPaint
将通过在中心使用完全透明并逐渐过渡到黑色边框来为您提供聚光灯效果。
以下内容将在图像周围绘制黑色边框:
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
import java.awt.geom.*;
public class ClipImageBorder
{
public static void main(String[] args) throws Exception
{
BufferedImage image = ImageIO.read(new File("mickeyred.jpg"));
// Set up the properties of the RadialGradientPaint
int border = 20;
int width = image.getWidth() - (2 * border);
int height = image.getHeight() - (2 * border);
Rectangle2D bounds = new Rectangle2D.Double(border,border,width,height);
float[] dist = {0.0f,0.8f,1.0f};
Color transparent = new Color(0.0f,0.0f,0.0f);
Color[] colors = {transparent,transparent,Color.BLACK};
RadialGradientPaint p = new RadialGradientPaint(bounds,dist,colors,MultipleGradientPaint.CycleMethod.NO_CYCLE);
// Use the AlphaComposite to paint the border
Graphics2D g2 = image.createGraphics();
g2.setPaint(p);
g2.setComposite( AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f) );
g2.fillRect(0,image.getWidth(),image.getHeight());
g2.dispose();
JOptionPane.showMessageDialog(null,new JLabel(new ImageIcon(image)));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。