`

Java图像渐变

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


图像变暗渐变:


图像变暗渐变:


图像变亮渐变:


图像变亮渐变:


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

Java代码 复制代码
  1. private int[] darkerPixels(BufferedImage originalPic, float beginPart) {   
  2.         // 得到图片的宽度。   
  3.         int imageWidth = originalPic.getWidth();   
  4.         // 得到图片的高度。   
  5.         int imageHeight = originalPic.getHeight();   
  6.         // 得到图片的像素值。   
  7.         int totalBlocks = imageWidth * imageHeight;   
  8.         // 创建相处值的存储空间。   
  9.         int[] pixels = new int[totalBlocks];   
  10.   
  11.         // 存储图像像素信息。   
  12.         DirectColorModel dem = new DirectColorModel(240xff00000x00ff00,   
  13.                 0x0000ff);   
  14.   
  15.         float inc = 255f / imageHeight / beginPart;   
  16.         int int_inc = 100;   
  17.         float float_inc = 0;   
  18.   
  19.         for (int i = 0; i < totalBlocks; i++) {   
  20.             if (i % imageHeight == 0 && i != 0) {   
  21.                 float_inc = float_inc + inc;   
  22.   
  23.                 int_inc = (int) (float_inc);   
  24.                 if (0 > int_inc) {   
  25.                     int_inc = 0;   
  26.                 }   
  27.   
  28.                 if (255 < int_inc) {   
  29.                     int_inc = 255;   
  30.                 }   
  31.             }   
  32.   
  33.             int a = dem.getAlphaMask() / 2;   
  34.   
  35.             int r = dem.getRed(pixels[i]) - int_inc;   
  36.             if (r < 0) {   
  37.                 r = 0;   
  38.             }   
  39.             int g = dem.getGreen(pixels[i]) - int_inc;   
  40.             if (g < 0) {   
  41.                 g = 0;   
  42.             }   
  43.             int b = dem.getBlue(pixels[i]) - int_inc;   
  44.             if (b < 0) {   
  45.                 b = 0;   
  46.             }   
  47.   
  48.             pixels[i] = a << 24 | r << 16 | g << 8 | b;   
  49.         }   
  50.         return pixels;   
  51.     }  

3.利用改变后的像素点,生成一副新的图片。代码如下:

 

Java代码 复制代码
  1. public final BufferedImage getGradualImg(BufferedImage originalPic) {   
  2.         // 设置渐变的开发位置,1为中间位置,小于1开始位置偏上,大于1开始位置偏下。   
  3.         float beginPart = 1f;   
  4.         // 得到图片的所有渐变后的像素点。   
  5.         int[] pixels = darkerPixels(originalPic, beginPart);   
  6.   
  7.         int imageWidth = originalPic.getWidth();   
  8.         int imageHeight = originalPic.getHeight();   
  9.         MemoryImageSource memoryimagesource = new MemoryImageSource(imageWidth,   
  10.                 imageHeight, new DirectColorModel(240xff00000x00ff00,   
  11.                         0x0000ff), pixels, 0, imageWidth);   
  12.         Image imageBuf = null;   
  13.         try {   
  14.             memoryimagesource.setAnimated(true);   
  15.             memoryimagesource.setFullBufferUpdates(true);   
  16.             imageBuf = this.createImage(memoryimagesource);   
  17.             // 生成新的图像   
  18.             memoryimagesource.newPixels();   
  19.   
  20.         } catch (NoSuchMethodError e) {   
  21.             e.printStackTrace();   
  22.         }   
  23.   
  24.         BufferedImage changedImage = new BufferedImage(imageWidth, imageHeight,   
  25.                 BufferedImage.TYPE_3BYTE_BGR);   
  26.         Graphics2D g2d = changedImage.createGraphics();   
  27.         g2d.drawImage(imageBuf, 00this);   
  28.   
  29.         return changedImage;   
  30.     }  
分享到:
评论

相关推荐

    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