图像处理之图像纹理添加效果(利用JAVA 2D纹理画笔)

简介: 图像处理之图像纹理添加效果(利用JAVA 2D纹理画笔)

一:基本思想


做法非常简单,首先找到一张你想要的纹理素材图片,然后将该图片通过灰度


转换成一张灰度级别的纹理图,取得像素数据,扫描每个像素的灰度值来设置


纹理图像的每个像素的透明度。灰度值越高越接近白色的透明度越高,灰度


值越小的越接近黑色的透明度越小。然后利用Java 2D的TexturePaint来创建


纹理画笔,最终一步就是在目标图像上填充一个与它大小一致的纹理矩形。


如此便完成。


二:程序运行效果


纹理图: 1357834918_4855.png



目标图像:


http://

1356365792_1126.png

效果图:

1357835468_2941.png


源程序代码:

package com.gloomyfish.filter.study;
 
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
 
public class TextureAdditionFilter extends AbstractBufferedImageOp {
 
  private BufferedImage textureImage;
  private float textureTransparency;
  
  public TextureAdditionFilter()
  {
    textureTransparency = 0.9f;
    System.out.println("Java texture Image Addition Filter");
  }
  
  public void setTextureImage(BufferedImage textureImage) {
    this.textureImage = textureImage;
  }
 
  public void setTextureTransparency(float textureTransparency) {
    this.textureTransparency = textureTransparency;
  }
 
  @Override
  public BufferedImage filter(BufferedImage src, BufferedImage dest) {
    if(textureImage != null) {
      int width = textureImage.getWidth();
          int height = textureImage.getHeight();
          BufferedImage grayTextureImage = null;
          grayTextureImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
          int[] inPixels = new int[width*height];
          int[] outPixels = new int[width*height];
          getRGB( textureImage, 0, 0, width, height, inPixels );
          int index = 0;
          for(int row=0; row<height; row++) {
            int ta = 0, tr = 0, tg = 0, tb = 0;
            for(int col=0; col<width; col++) {
              index = row * width + col;
              ta = (inPixels[index] >> 24) & 0xff;
                  tr = (inPixels[index] >> 16) & 0xff;
                  tg = (inPixels[index] >> 8) & 0xff;
                  tb = inPixels[index] & 0xff;
                  tr = tg = tb = (int)(0.299 * (double)tr + 0.587 * (double)tg + 0.114 * (double)tb);
                  ta = (int)(textureTransparency * tr);
                  outPixels[index] = (ta << 24) | (tr << 16) | (tg << 8) | tb;
                  
            }
          }
          
          // then call java 2D API to print texture image on target image
          // you can see magic result image if you adjust the parameter-textureTransparency
          // just play with it......
          setRGB( grayTextureImage, 0, 0, width, height, outPixels );
          Rectangle2D rectangle = new Rectangle(0, 0, width, height);
          TexturePaint tp = new TexturePaint(grayTextureImage, rectangle);
          Graphics2D g2d = src.createGraphics();
          g2d.setPaint(tp);
          width = src.getWidth();
          height = src.getHeight();
          g2d.fillRect(0, 0, width, height);
    }
    
    return src;
  }
 
}

转载请务必注明

相关文章
|
1月前
|
数据采集 机器学习/深度学习 Java
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
本文介绍了如何使用Java和Apache HttpComponents库从Facebook获取图像数据。通过设置爬虫代理IP以避免限制,利用HttpClient发送请求,解析HTML找到图像链接,然后下载并保存图片。提供的Java代码示例展示了实现过程,包括创建代理配置、线程池,以及下载图片的逻辑。注意,实际应用需根据Facebook页面结构进行调整。
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
|
23天前
|
Java API
使用Java 2D绘制黑白太极图案
使用Java 2D绘制黑白太极图案
11 0
|
23天前
|
缓存 Java
Java Swing 2D系统属性参数详解
Java Swing 2D系统属性参数详解
18 0
|
30天前
|
算法 Java Apache
Java一分钟之-图像处理:BufferedImage与ImageIO
Java图像处理涉及`BufferedImage`和`ImageIO`。`BufferedImage`提供像素级访问,而`ImageIO`用于读写图像。常见问题包括:不支持的图像格式、处理尺寸不当、忽略异常和未关闭流。解决方法是检查插件支持、正确处理尺寸、捕获异常和及时关闭流。实践中不断优化,提升代码性能和稳定性。
50 0
|
1月前
|
文字识别 Java Maven
java调用tess4j识别图像中的文字
java调用tess4j识别图像中的文字
70 3
|
1月前
|
算法 Python Java
Java每日一练(20230414) Pow(x, n) 、旋转图像、买卖股票的最佳时机 IV
Java每日一练(20230414) Pow(x, n) 、旋转图像、买卖股票的最佳时机 IV
30 0
Java每日一练(20230414) Pow(x, n) 、旋转图像、买卖股票的最佳时机 IV
|
6月前
|
机器学习/深度学习 Java
48. 旋转图像 --力扣 --JAVA
​ 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 ​
38 0
|
机器学习/深度学习 算法 Java
Java使用OpenCV进行图像操作
OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。
2126 2
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏05图像仿射变换(平移和缩放操作)
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏05图像仿射变换(平移和缩放操作)
126 0
|
1天前
|
监控 安全 算法
如何有效地处理Java中的多线程
如何有效地处理Java中的多线程