图像处理之图像纹理添加效果(利用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;
  }
 
}

转载请务必注明

相关文章
|
5月前
|
人工智能 缓存 自然语言处理
Java与多模态AI:构建支持文本、图像和音频的智能应用
随着大模型从单一文本处理向多模态能力演进,现代AI应用需要同时处理文本、图像、音频等多种信息形式。本文深入探讨如何在Java生态中构建支持多模态AI能力的智能应用。我们将完整展示集成视觉模型、语音模型和语言模型的实践方案,涵盖从文件预处理、多模态推理到结果融合的全流程,为Java开发者打开通往下一代多模态AI应用的大门。
500 41
|
8月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
IDE Java API
Java游戏开发基础:从零开始制作一个简单的2D游戏
本文介绍了使用Java开发一个简单的2D避障游戏的基础流程。
1311 10
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
191 1
|
数据采集 存储 Java
Java爬虫图像处理:从获取到解析
Java爬虫图像处理:从获取到解析
|
数据采集 安全 Java
Java Selenium WebDriver:代理设置与图像捕获
Java Selenium WebDriver:代理设置与图像捕获
|
机器学习/深度学习 Java 计算机视觉
如何在Java中实现图像处理和识别
如何在Java中实现图像处理和识别
|
算法 Java 计算机视觉
实现Java中的图像处理功能
实现Java中的图像处理功能
|
机器学习/深度学习 人工智能 算法
Java图像处理与计算机视觉应用
Java图像处理与计算机视觉应用
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
286 1