`
muchao_119
  • 浏览: 6922 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
文章分类
社区版块
存档分类
最新评论

Java图像处理所用到的重要类

阅读更多

1)打包生成图像数据的类

java.awt.image 
类 MemoryImageSource

java.lang.Object
  java.awt.image.MemoryImageSource
所有已实现的接口:
ImageProducer
public class MemoryImageSource
extends Object
implements ImageProducer
 

此类是 ImageProducer 接口的一个实现,该接口使用一个数组为 Image 生成像素值。下面的示例计算了一幅 100x100 的图像,表示沿 X 轴从黑色渐变到蓝色,沿 Y 轴从黑色渐变到红色:

           int w = 100;
          int h = 100;
          int pix[] = new int[w * h];
          int index = 0;
          for (int y = 0; y < h; y++) {
              int red = (y * 255) / (h - 1);
              for (int x = 0; x < w; x++) {
                  int blue = (x * 255) / (w - 1);
                  pix[index++] = (255 << 24) | (red << 16) | blue;
              }
          }
          Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));

MemoryImageSource 还能够管理随时间的推移而变化的内存图像,以实现动画或自定义呈现。下面的示例显示了如何设置动画源并通知数据的改变(改编自 Garth Dickie 的 MemoryAnimationSourceDemo):

          int pixels[];
          MemoryImageSource source;

          public void init() {
              int width = 50;
              int height = 50;
              int size = width * height;
              pixels = new int[size];

              int value = getBackground().getRGB();
              for (int i = 0; i < size; i++) {
                  pixels[i] = value;
              }

              source = new MemoryImageSource(width, height, pixels, 0, width);
              source.setAnimated(true);
              image = createImage(source);
          }

          public void run() {
              Thread me = Thread.currentThread( );
              me.setPriority(Thread.MIN_PRIORITY);

              while (true) {
                  try {
                      thread.sleep(10);
                  } catch( InterruptedException e ) {
                      return;
                  }

                  // Modify the values in the pixels array at (x, y, w, h)

                  // Send the new data to the interested ImageConsumers
                  source.newPixels(x, y, w, h);
              }
          }
 
(2)生成图像的类

java.awt 
类 Component

java.lang.Object
  java.awt.Component
所有已实现的接口:
ImageObserverMenuContainerSerializable

一般的情况下,我们不会直接使用这个类,而是使用它的子类,如Frame等

而在它的成员方法中,对于图像处理有一个很有用的方法就是

createImage

public Image createImage(ImageProducer producer)
由指定的图像生成器创建一幅图像。

 

参数:
producer - 图像生成器
返回:
生成的图像
从以下版本开始:
JDK1.0
当我们对图像像素数据处理完以后,我们就可以利用这个像素矩阵生成一个MemoryImageSource对象
再利用上述方法生成一个Image对象。
 
(3)获取/生成图像的类

java.awt 类 Toolkit

java.lang.Object
  java.awt.Toolkit
这个类提供多种读取与创建图像的方法,如:
Image createImage(byte[] imagedata)            创建一幅图像,该图像对存储在指定字节数组中的图像进行解码。
abstract  Image createImage(byte[] imagedata, int imageoffset, int imagelength)            创建一幅图像,该图像以指定偏移量和长度对存储在指定字节数组中的图像进行解码。
abstract  Image createImage(ImageProducer producer)            使用指定的图像生成器创建一幅图像。
abstract  Image createImage(String filename)            返回从指定文件获取像素数据的图像。
abstract  Image createImage(URL url)            返回一幅图像,该图像从指定 URL 获取像素数据。

abstract  Image getImage(String filename)            返回一幅图像,该图像从指定文件中获取像素数据,图像格式可以是 GIF、JPEG 或 PNG。
abstract  Image getImage(URL url)            返回一幅图像,该图像从指定 URL 获取像素数据。
通常我们使用它的默认工具包,通过如下静态方法获取:

static Toolkit getDefaultToolkit()            获取默认工具包。
 
(4)获取图像像素数据的类

java.awt.image
类 PixelGrabber

java.lang.Object
  java.awt.image.PixelGrabber
所有已实现的接口:
ImageConsumer

public class PixelGrabber
extends Object
implements ImageConsumer
 

PixelGrabber 类实现可以附加在 Image 或 ImageProducer 对象上以获得该图像像素子集的 ImageConsumer。下面是一个示例:

public void handlesinglepixel(int x, int y, int pixel) {
          int alpha = (pixel >> 24) & 0xff;
          int red     = (pixel >> 16) & 0xff;
          int green = (pixel >>    8) & 0xff;
          int blue    = (pixel        ) & 0xff;
          // Deal with the pixel as necessary...
 }

 public void handlepixels(Image img, int x, int y, int w, int h) {
          int[] pixels = new int[w * h];
          PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
          try {
              pg.grabPixels();
          } catch (InterruptedException e) {
              System.err.println("interrupted waiting for pixels!");
              return;
          }
          if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
              System.err.println("image fetch aborted or errored");
              return;
          }
          for (int j = 0; j < h; j++) {
              for (int i = 0; i < w; i++) {
                  handlesinglepixel(x+i, y+j, pixels[j * w + i]);
              }
          }
 }
(5)显示图像的类
显示图像的方法有很多种,其中比较常用的方法就是利用ImageIcon类包装一个Image对象,再
通过设置一个Label对象的Icon来显示图像。

javax.swing
类 ImageIcon

java.lang.Object
  javax.swing.ImageIcon
所有已实现的接口:
Serializable, Accessible, Icon
ImageIcon(Image image) 
            根据图像对象创建一个 ImageIcon。

分享到:
评论
2 楼 muchao_119 2011-03-15  
keke8614 写道
垃圾,直接贴API文档有意思么?

自己学习,做个笔记,你厉害别来javaeye看帖,别跟愤青似的满哪喷
1 楼 keke8614 2011-03-10  
垃圾,直接贴API文档有意思么?

相关推荐

    java读取图片信息所用jar包

    Java标准库虽然提供了基础的图像处理能力,如`javax.imageio`包中的`ImageIO`类,但这些API往往不包含读取详细元数据的功能。 要全面地读取图片信息,开发者通常会引入如Apache Commons Imaging(以前称为Commons-...

    java3D的jar包

    3. **纹理映射**:Java3D提供了纹理映射功能,通过`Texture`和`TextureAttributes`类可以将图像贴合到3D对象表面,增强视觉效果。开发者可以控制纹理的重复、平滑度、过滤方式等特性。 4. **光照与材质**:利用`...

    java获取DICOM格式图片demo

    本教程主要讲解如何使用Java处理DICOM格式的图像,并将其转换为常见的png、JPG或jpeg格式。 首先,我们需要一个能够读取和操作DICOM文件的Java库。常见的选择是DCMTK(DICOM Toolkit),但它是C++库,需要通过JNI...

    Java实现拼图小游戏

    这需要使用到Java的时间处理类,如`java.util.Timer` 和 `java.util.TimerTask`,以及计数变量来跟踪移动次数。 2. **自定义图片**:允许用户选择自己的图片作为拼图的基础,这需要读取和处理图像文件。Java提供了`...

    JAVA记忆测试系统

    通过对这些文件的深入理解和分析,我们可以学习到如何使用Java来构建一个具有用户交互的游戏应用,包括面向对象的设计、图形用户界面(GUI)的开发、事件处理、数据存储以及游戏逻辑的实现。 这个记忆测试系统不仅...

    java版宝石迷情游戏

    1. **图形用户界面(GUI)设计**:游戏中所用到的如`Option.png`, `back1.png`, `6.png`等图片文件,表明游戏采用了GUI来展示游戏界面和元素。Java提供了Swing和JavaFX两个库来创建图形用户界面,开发者可能利用这些库...

    Java大作业

    4. **JDBC(Java Database Connectivity)**:JDBC是Java连接数据库的标准API,它允许Java程序与各种类型的数据库进行交互,如MySQL在这里所用。 5. **XML(Extensible Markup Language)**:XML用于存储和传输结构...

    Java 小游戏 拼图

    学习这个源码,你可以了解Java GUI编程的基本结构,理解事件驱动编程模型,以及如何利用Java处理图像和实现基本的游戏逻辑。同时,你还可以学习到如何组织代码结构,创建可复用的组件,以及如何调试和优化程序性能。...

    java连连看小程序

    在实现这些功能时,Java的面向对象编程特性将发挥重要作用。我们可以创建多个类来封装不同的功能,如GameBoard类来管理游戏盘面,Player类来存储玩家信息,Pattern类来表示单个图案等。通过类与类之间的交互,可以使...

    javajar 包下载地址

    这个网站提供了分类清晰的JAR包目录,从基础的Java SE和Java EE标准库到高级的框架如Spring、Hibernate,再到专业领域的工具如图像处理、数据库连接器等,几乎涵盖了所有可能的Java开发场景。此外,该网站还可能提供...

    【计算机专业Java-毕业设计100套之】JAVA画图形学程序(论文+源代码)

    论文部分将深入探讨图形学的基本原理,包括二维和三维图形的构建、颜色模型、图像处理、坐标系统、变换以及图形渲染等。这些理论知识是理解并实现图形程序的基础。在毕业论文中,作者可能会详细介绍设计思路、所用...

    TilePuzzle_java_complexvwc_

    这涉及到Android的`Bitmap`类和图像处理算法。 5. **游戏逻辑**: 游戏的核心逻辑通常在`GameEngine.java`或类似类中实现。这部分代码处理拼图的生成、移动、检查完成状态等功能。它可能使用了二维数组来表示拼图...

    基于Java的拼图游戏实现.pdf

    文中还提到了游戏实现中所用到的Java类,例如PuzzleFrame.java负责游戏主界面的设计,PuzzlePanel.java负责拼图模块的相关功能,PuzzleCell.java则负责单个拼图单元的实现。通过这些类的协同工作,构成了游戏的主体...

    鲨鱼攻击猎物游戏java源代码.

    2. **图形用户界面(GUI)编程**:游戏界面的实现将涉及到Java的Swing或JavaFX库,用于创建窗口、按钮、图像等元素,提供用户交互。 3. **游戏逻辑**:鲨鱼的移动、猎物的行为、碰撞检测等都属于游戏逻辑部分。这...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    第2篇为范例演练篇,主要包括基础知识相关、数据库相关、图像与文件相关、图表与报表相关、Ajax等相关的范例;第3篇为项目实战篇,主要包括讯友联系人管理模块、播客视频管理模块、博客管理模块、明日知道论坛管理...

    java例子

    4. **Pic_modify.java**: 这可能是一个处理图像的Java程序,可能涉及到Java的AWT或Swing库,用于显示、修改或处理图像数据。 5. **DaemonThread.java**和**AThread.java**: 这两个文件涉及到Java多线程。"Daemon...

    生成验证码_java代码

    总的来说,这个项目涉及了Java Web开发的基础知识,包括Servlet、图像处理、随机数生成以及用户验证流程。通过学习和理解这个项目,可以加深对Java Web开发的理解,并掌握验证码这一重要的安全机制。

    基于opencv的java车牌检测识别库

    在实际开发中,Java程序员可能会遇到需要在自己的应用中集成图像处理和计算机视觉功能的情况,比如车牌识别系统。这样的系统在交通监控、智能停车等领域有着广泛的应用。通过实战,开发者可以更好地理解和掌握如何将...

    迷宫 JAVA_课程设计

    9. JAVA 中的图形选择和图像处理 10. 音频处理和多媒体技术的应用 本课程设计旨在培养学生结构化程序设计的思想,加深对 JAVA 语言基本语言要素和控制结构的理解与运用,并通过简易迷宫系统的设计与实现,锻炼学生...

    Android 图像连环画特效源码.zip

    - **理解算法**:确保你明白所用的图像处理算法,如边缘检测和色彩量化,这样才能更好地修改和优化代码。 - **性能优化**:Android设备的性能各异,图像处理可能会消耗大量计算资源。因此,了解如何优化代码,比如...

Global site tag (gtag.js) - Google Analytics