java 纹理_图像处理之图像纹理添加效果(利用JAVA 2D纹理画笔)
一:基本思想
做法非常简单,首先找到一张你想要的纹理素材图片,然后将该图片通过灰度
转换成一张灰度级别的纹理图,取得像素数据,扫描每个像素的灰度值来设置
纹理图像的每个像素的透明度。灰度值越高越接近白色的透明度越高,灰度
值越小的越接近黑色的透明度越小。然后利用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纹理画笔)相关推荐
- 知识图谱java实现_知识图谱:neo4j(四)Java API
知识图谱:neo4j(四)Java API 知识图谱:neo4j(四)Java API Neo4j Java API Neo4j 提供 JAVA API 以编程方式执行所有数据库操作.它支持两种类型的 ...
- JAVA抽象类空指针异常_[ Coding七十二绝技 ] 如何利用Java异常快速分析源码
前言 异常一个神奇的东西,让广大程序员对它人又爱又恨. 爱它,通过它能快速定位错误,经过层层磨难能学到很多逼坑大法. 恨他,快下班的时刻,周末的早晨,它踏着七彩云毫无征兆的来了. 今天,要聊的是它的一 ...
- dw java 编码_不写代码 用Dreamweaver轻松插入Java特效
利用 Java 技术制作网页特效,可以使网页升动美观,然而, Java 命令并不是那么容易掌握的,很多读者看到编程语句就头晕.本实例将为读者介绍一个好东西 --Anfy Java ,有了它,可以不用编 ...
- 反转字符串java实现_反转字符串的几种实现(Java)
反转字符串的几种实现(Java) 首先第一种是利用Java中的类库对象进行反转 //第一种 使用Java类库的diam实现反转 public String reverse(String str){ S ...
- java书籍_这本最适合夯实基础的Java 书籍,80% 的 Java 程序员没认真看过
今天要给大家带来的一本书,是大名鼎鼎的head first系列丛书的一本<head first Java>相信很多学习Java的朋友对它都不会陌生. 深入浅出系列书籍是由O'Reilly出 ...
- 心java源代码_写了一个心形图案的java源代码,想发给朋友,朋友怎样才能像打开文档一样方便查看呢?...
搞清楚java的运行机制你就明白了该怎么办 java源代码->java编译器生成字节码文件->java虚拟机执行字节码文件->心形图案显示 因此你要让朋友直接运行,你就要让上述过程自 ...
- 红米2支持java吗_红米2a会有报错:java.lang.NullPointerException
离线打包版本用的是2016年3月16日发布的. 其他手机正常,目前只有红米2a会有报错:java.lang.NullPointerException log信息如下: java.lang.Runtim ...
- aws部署java应用_在 Elastic Beanstalk 上创建和部署 Java 应用程序 - AWS Elastic Beanstalk...
本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. 在 Elastic Beanstalk 上创建和部署 Java 应用程序 AWS Elastic Beanstalk 支持 ...
- 连字符在java中怎么表示_如何在字符串之间添加连字符 - java
我有以下字符串xxxxx,我想添加x-xxxx之类的连字符,如何使用Java? 参考方案 您可以使用String#substring(). String newstring = string.subs ...
最新文章
- C6678-SRIO和FPGA的通信
- SQLite中的运算符表达式
- 创建oracle实例
- 生产订单结算KKS1常见错误
- CentOS7下安装tomcat8
- UI层调用WCF服务实例(源码)
- CentOS 6.5 安装配置Tomcat7服务器
- micropython是啥 知乎_嵌入式开发必备调试工具:Micro-Lab
- jdbc时区_什么比日期和时区更难? SQL / JDBC中的日期和时区!
- Mac 下隐藏显示隐藏文件
- 一个周内上线50个增长策略,竟然能这么高效!
- c 给定字符串中查找_【C进阶】练习题(一)
- C++ 出现异常“.... \debug_heap.cpp Line:980 Expression:__acrt_first_block==header“
- Windows加域提示 已超出此域允许的创建的计算机账户的最大值,请联系统管理员
- 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)
- lamda表达式修改数据_关系数据库SQL语言简介
- Fragstats4.2.1入门心得
- windows自动更新导致:无法访问网络位置*:\Program Files(x86)
- iterator的用法
- 南充中等计算机专业学校排名,南充计算机/电脑学校哪里好|南充外国语中等专业学校计算机应用|顺庆计算机学校怎么样|南充中专学校...