`

Java图像渐变

阅读更多
图像渐变我们大体想一下思路无非是这样:将图像所有的像素点的RBG,每个点就减去相同的量,而且这个量是个渐变的量。是的,就是这样,我们的程序也是这个思路,不过就是没有单纯的“想”这么简单了。我这里只编写了纵向渐变,还没有写其他复杂的渐变,以后慢慢研究吧。先看效果:
原始图片:

图像变暗渐变:

图像变暗渐变:

图像变亮渐变:

图像变亮渐变:


我们以图像渐变暗举例,渐变亮同样的道理,无非是一个减,一个加。
1.我们要先拿到图片,这个不赘述了,就是获得图像的BufferedImage。
2.获得图像的宽度,高度,像素值,并创建一个存储图像像素信息DirectColorModel类dem。然后我们从dem中每一个像素值。我们给每一个像素都减去一个相同的像素值。并且伴随着图片的高度不同,每个像素点减去的值也是一个渐变的值。这里需要说明一下的是float beginPart,beginPart是渐变开始的位置,默认为1,就是从图像中间开始,beginPart<1从图像的中间偏上开始渐变,越小越偏上。beginPart>1从图像的中间偏下开始渐变,越大越偏上。
代码如下:
private int[] darkerPixels(BufferedImage originalPic, float beginPart) {
		// 得到图片的宽度。
		int imageWidth = originalPic.getWidth();
		// 得到图片的高度。
		int imageHeight = originalPic.getHeight();
		// 得到图片的像素值。
		int totalBlocks = imageWidth * imageHeight;
		// 创建相处值的存储空间。
		int[] pixels = new int[totalBlocks];

		// 存储图像像素信息。
		DirectColorModel dem = new DirectColorModel(24, 0xff0000, 0x00ff00,
				0x0000ff);

		float inc = 255f / imageHeight / beginPart;
		int int_inc = 100;
		float float_inc = 0;

		for (int i = 0; i < totalBlocks; i++) {
			if (i % imageHeight == 0 && i != 0) {
				float_inc = float_inc + inc;

				int_inc = (int) (float_inc);
				if (0 > int_inc) {
					int_inc = 0;
				}

				if (255 < int_inc) {
					int_inc = 255;
				}
			}

			int a = dem.getAlphaMask() / 2;

			int r = dem.getRed(pixels[i]) - int_inc;
			if (r < 0) {
				r = 0;
			}
			int g = dem.getGreen(pixels[i]) - int_inc;
			if (g < 0) {
				g = 0;
			}
			int b = dem.getBlue(pixels[i]) - int_inc;
			if (b < 0) {
				b = 0;
			}

			pixels[i] = a << 24 | r << 16 | g << 8 | b;
		}
		return pixels;
	}

3.利用改变后的像素点,生成一副新的图片。代码如下:
public final BufferedImage getGradualImg(BufferedImage originalPic) {
		// 设置渐变的开发位置,1为中间位置,小于1开始位置偏上,大于1开始位置偏下。
		float beginPart = 1f;
		// 得到图片的所有渐变后的像素点。
		int[] pixels = darkerPixels(originalPic, beginPart);

		int imageWidth = originalPic.getWidth();
		int imageHeight = originalPic.getHeight();
		MemoryImageSource memoryimagesource = new MemoryImageSource(imageWidth,
				imageHeight, new DirectColorModel(24, 0xff0000, 0x00ff00,
						0x0000ff), pixels, 0, imageWidth);
		Image imageBuf = null;
		try {
			memoryimagesource.setAnimated(true);
			memoryimagesource.setFullBufferUpdates(true);
			imageBuf = this.createImage(memoryimagesource);
			// 生成新的图像
			memoryimagesource.newPixels();

		} catch (NoSuchMethodError e) {
			e.printStackTrace();
		}

		BufferedImage changedImage = new BufferedImage(imageWidth, imageHeight,
				BufferedImage.TYPE_3BYTE_BGR);
		Graphics2D g2d = changedImage.createGraphics();
		g2d.drawImage(imageBuf, 0, 0, this);

		return changedImage;
	}


附件是一个完整的例子,运行时,请将文件夹根目录下的demo.jpg复制到C盘根目录下,因为这个路径我在程序里偷懒是写死的,如果不复制这个图片,找不到图片程序自然会出IO异常;或者大家自己去程序里修改图片的路径。

文章地址:http://javapub.iteye.com/blog/736799

相关文章
Java图像图片 边缘检测 http://javapub.iteye.com/blog/685468
Java图像变灰 http://javapub.iteye.com/blog/687082
Java 给图片增加 水印图片 水印文字 [url]Java 给图片增加 水印图片 水印文字[/url]
Java图像渐变 http://javapub.iteye.com/blog/736799
Java将大图片转成小图片 http://javapub.iteye.com/blog/666607
2
0
分享到:
评论
1 楼 zengzhen 2014-01-09  
根本整个程序有问题

相关推荐

    java图片高级处理(渐变,锐化,边缘检测)

    在Java编程语言中,对图片进行高级处理包括各种图像操作,如渐变、锐化和边缘检测等。这些技术在图像处理和计算机视觉领域中至关重要,可以用于改善图像质量、识别图像特征或创建视觉效果。以下是对这些概念的详细...

    一个圆形到方形的渐变效果 java

    在Java编程语言中,创建图形效果,特别是从圆形到方形的渐变效果,涉及到Java的图形绘制和颜色处理。这个程序可能使用了Java AWT(Abstract Window Toolkit)或Swing库来实现,这两个库提供了丰富的图形用户界面组件...

    基于Java的BGradualProgress渐变进度条设计源码

    BGradualProgress是一个基于Java的渐变进度条设计源码,包含51个文件,其中包括17个XML文件、10个PNG图片文件、6个Java源文件、4个Gradle文件、3个gitignore文件、2个.pro文件、2个Properties文件、1个LICENSE文件和...

    渐变效果的文字

    Java 2D API是一个强大的图形绘制和图像处理工具包,它允许开发者创建复杂的图形、矢量图形以及进行高级的文本渲染。要实现渐变文字,我们需要关注以下关键知识点: 1. **Graphics2D对象**:这是Java 2D API的核心...

    java GUI 图片渐变效果源代码

    图片的渐变,能够实现图片的渐进渐出,图片的切换等功能

    Java图片处理工具ImageMagick

    Java图片处理工具ImageMagick是一个强大的跨平台图形处理库,它允许开发人员在Java应用程序中进行复杂的图像操作,包括但不限于转换、编辑、合成图像以及处理大量格式的图像文件。ImageMagick是由C语言编写的,但...

    Java实现颜色渐变效果

    Java实现颜色渐变效果可以通过使用Java的图形库AWT和Swing来实现,使用BufferedImage和Graphics对象来绘制图像,并使用递增和递减颜色值来实现颜色渐变的效果。 知识点: * Java图形库AWT和Swing * BufferedImage...

    Java图像编程实例库

    Java图像编程是Java编程语言中的一个重要领域,它允许开发者创建丰富的图形用户界面(GUI)和处理图像数据。这个“Java图像编程实例库”显然是一份集合了多种Java图像编程示例的资源,可以帮助学习者更好地理解和...

    Js实现图片渐变效果.rar

    这个"Js实现图片渐变效果.rar"压缩包可能包含一个或多个代码示例,帮助初学者理解如何通过JavaScript来操作图像像素,实现颜色渐变。 首先,我们需要了解JavaScript中的Canvas API。Canvas是HTML5引入的一个重要...

    android 设置Alpha值实现图片渐变效果

    在Android开发中,设置Alpha值实现图片渐变效果是一种常见的动画技术,它可以为用户界面增添动态感和视觉吸引力。本文将深入探讨如何通过调整Alpha透明度来实现这种效果,并结合提供的资源文件`Xh_04_05_Test_01`...

    Android图片滑动渐变

    - 考虑使用BitmapShader,它允许我们在Bitmap上应用Shader,这对于处理大图或复杂图像的渐变效果特别有用。 - 若需频繁更新,使用硬件加速可以提升性能,通过在Activity或View的属性中开启硬件加速。 代码示例: ...

    imgmaker java 图像 特效 处理

    1. **Java图像处理基础**: Java中的`java.awt`和`javax.imageio`包为开发者提供了基本的图像处理功能。例如,可以使用`BufferedImage`类创建、读取和修改图像。`Graphics2D`子类提供了一套绘图方法,用于在图像上...

    java 图片溶合特效源码

    Java图片溶合特效是一种在图像处理中常见的技术,它通过将两张或多张图片按照特定算法进行混合,创造出独特的视觉效果。...通过深入学习和实践,你不仅可以掌握Java图像处理的基本原理,还能提升自己的编程和设计能力。

    android Animation图片渐变动画 Demo

    本文将深入探讨如何实现一个图片渐变动画的Demo,基于提供的信息,我们主要关注两个方面:源码解析和工具使用。 首先,"android Animation图片渐变动画"指的是在Android平台上,通过编程方式让图片从一种状态平滑地...

    java图像编程大全

    通过这个"java图像编程大全"实例库,开发者可以学习到如何使用Java来创建交互式图像应用,如图形编辑器、图片浏览器,甚至是简单的游戏。每一个源代码都是一个生动的教学案例,帮助理解Java图形编程的原理和实践技巧...

    浅谈Java设置PPT幻灯片背景——纯色、渐变、图片背景

    在本文中,我们将介绍如何使用Java设置PPT幻灯片背景,包括纯色、渐变和图片背景三个方面。 纯色背景 在Java中,我们可以使用Spire.Presentation库来设置PPT幻灯片背景。首先,我们需要添加Spire.Presentation.jar...

    图形图像实验java代码

    Java作为一种广泛使用的编程语言,提供了强大的图形图像处理能力。本实验旨在通过Java实现图形图像的各种功能,包括但不限于绘制、变换、颜色处理等,同时也锻炼了算法设计与实现的能力。 首先,我们要理解Java中的...

    java2D Java Java Java

    Java 2D是Java平台中的一个图形处理框架,它提供了丰富的功能来创建和操作复杂的二维图形和图像。这个框架在Sun Microsystems(后被Oracle收购)的程序员们的精心设计下诞生,旨在为Java开发者提供高效、灵活的图形...

    java自定义二维码带logo生成代码

    要在二维码中间嵌入Logo,我们需要先加载Logo图片,然后将其与生成的二维码图像合并。以下是一个简单的实现: ```java BufferedImage logo = ImageIO.read(new File("logo.png")); int logoWidth = Math.min...

Global site tag (gtag.js) - Google Analytics