一:基本思想

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

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

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

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

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

如此便完成。

二:程序运行效果

纹理图:

目标图像:

http://

效果图:

源程序代码:

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

int ta = 0, tr = 0, tg = 0, tb = 0;

for(int col=0; 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;

}

}

转载请务必注明

java 纹理_图像处理之图像纹理添加效果(利用JAVA 2D纹理画笔)相关推荐

  1. 知识图谱java实现_知识图谱:neo4j(四)Java API

    知识图谱:neo4j(四)Java API 知识图谱:neo4j(四)Java API Neo4j Java API Neo4j 提供 JAVA API 以编程方式执行所有数据库操作.它支持两种类型的 ...

  2. JAVA抽象类空指针异常_[ Coding七十二绝技 ] 如何利用Java异常快速分析源码

    前言 异常一个神奇的东西,让广大程序员对它人又爱又恨. 爱它,通过它能快速定位错误,经过层层磨难能学到很多逼坑大法. 恨他,快下班的时刻,周末的早晨,它踏着七彩云毫无征兆的来了. 今天,要聊的是它的一 ...

  3. dw java 编码_不写代码 用Dreamweaver轻松插入Java特效

    利用 Java 技术制作网页特效,可以使网页升动美观,然而, Java 命令并不是那么容易掌握的,很多读者看到编程语句就头晕.本实例将为读者介绍一个好东西 --Anfy Java ,有了它,可以不用编 ...

  4. 反转字符串java实现_反转字符串的几种实现(Java)

    反转字符串的几种实现(Java) 首先第一种是利用Java中的类库对象进行反转 //第一种 使用Java类库的diam实现反转 public String reverse(String str){ S ...

  5. java书籍_这本最适合夯实基础的Java 书籍,80% 的 Java 程序员没认真看过

    今天要给大家带来的一本书,是大名鼎鼎的head first系列丛书的一本<head first Java>相信很多学习Java的朋友对它都不会陌生. 深入浅出系列书籍是由O'Reilly出 ...

  6. 心java源代码_写了一个心形图案的java源代码,想发给朋友,朋友怎样才能像打开文档一样方便查看呢?...

    搞清楚java的运行机制你就明白了该怎么办 java源代码->java编译器生成字节码文件->java虚拟机执行字节码文件->心形图案显示 因此你要让朋友直接运行,你就要让上述过程自 ...

  7. 红米2支持java吗_红米2a会有报错:java.lang.NullPointerException

    离线打包版本用的是2016年3月16日发布的. 其他手机正常,目前只有红米2a会有报错:java.lang.NullPointerException log信息如下: java.lang.Runtim ...

  8. aws部署java应用_在 Elastic Beanstalk 上创建和部署 Java 应用程序 - AWS Elastic Beanstalk...

    本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. 在 Elastic Beanstalk 上创建和部署 Java 应用程序 AWS Elastic Beanstalk 支持 ...

  9. 连字符在java中怎么表示_如何在字符串之间添加连字符 - java

    我有以下字符串xxxxx,我想添加x-xxxx之类的连字符,如何使用Java? 参考方案 您可以使用String#substring(). String newstring = string.subs ...

最新文章

  1. C6678-SRIO和FPGA的通信
  2. SQLite中的运算符表达式
  3. 创建oracle实例
  4. 生产订单结算KKS1常见错误
  5. CentOS7下安装tomcat8
  6. UI层调用WCF服务实例(源码)
  7. CentOS 6.5 安装配置Tomcat7服务器
  8. micropython是啥 知乎_嵌入式开发必备调试工具:Micro-Lab
  9. jdbc时区_什么比日期和时区更难? SQL / JDBC中的日期和时区!
  10. Mac 下隐藏显示隐藏文件
  11. 一个周内上线50个增长策略,竟然能这么高效!
  12. c 给定字符串中查找_【C进阶】练习题(一)
  13. C++ 出现异常“.... \debug_heap.cpp Line:980 Expression:__acrt_first_block==header“
  14. Windows加域提示 已超出此域允许的创建的计算机账户的最大值,请联系统管理员
  15. 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)
  16. lamda表达式修改数据_关系数据库SQL语言简介
  17. Fragstats4.2.1入门心得
  18. windows自动更新导致:无法访问网络位置*:\Program Files(x86)
  19. iterator的用法
  20. 南充中等计算机专业学校排名,南充计算机/电脑学校哪里好|南充外国语中等专业学校计算机应用|顺庆计算机学校怎么样|南充中专学校...

热门文章

  1. 计算机科学精彩帖子收集--JAVA和分布式专栏
  2. 在Linux中使用U盘
  3. 插入排序与选择排序的比较
  4. 如何写死 u-boot 中的 bootargs
  5. 中科院科研人员自白:我为什么离开北京
  6. 教授计算机预测,计算机在预测肺癌等方面的客观与准确远超病理学家
  7. 流量卡之家:全球5G正在加速到来 它和3G、4G有什么差异
  8. 移通创联Profinet网关将丹佛斯变频器接入西门子PLC
  9. pycharm使用pip更换安装源
  10. 教你一键开启积分商城API对接上线,积分商城搭建如此简单