Java线程控制的图像分割与合成

2016-02-19 12:42 20 1 收藏

今天图老师小编要跟大家分享Java线程控制的图像分割与合成,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

  摘 要:使用Java对WEB静态图像进行分割重组,然后根据用户的交互操作合成显示,并利用线程对程序的并发性加以控制,从而达到图像显示的动态性和交互性效果。
  
  要害词:Java语言 类Class 线程Thread
  
  Java是一种面向对象的编程语言。它具有与平台无关、面向对象、动态、安全等特点,答应直接使用多线程方式进行编程,对程序进行并发控制。Java还支持分布式网络操作,从而能够方便地进行网络文件对象的存取。利用Java语言本身提供的绘图功能,可以绘制一些简单的图形。而对于复杂图形,一般先用绘图软件制成图像,然后采用Java所提供的方法对图像下载并进行处理和控制,从而实现静态图像的动态显示。
  
  1 Java图像处理与线程的并发控制
  
  1.1 Java图像处理
  
  Java语言提供了丰富的类(Class)、接口(Interface)以及相应的调用方法(Method)。使用这些类或接口,可以定义自己的类或子类,充分利用Java面向对象的特性进行编程。在java.awt包中,提供了专门的Image类,它是1种抽象类,可提供抽象的方法描绘图片的一些共同特性。而在Applet类和Tookit类中都提供了2种getImage()方法下载图像,分别根据绝对地址和相对地址查询所要下载的图像。通常采用相对地址的下载方法,它的语法定义及功能如下:
  
  1.public Image getImage(URL url,String name)
  
  功能:根据相对地址下载图像。
  
  参数:url??URL(统一资源定位)基地址, name 图像文件名。
  
  获取图像后就可以调用Graphics类提供的drawImage()方法显示图像。
  
  2.public drawImage(Image img,int x,int y,observer)
  
  功能:在指定位置显示图像。
  
  参数:img 待显示图像,x 横坐标,y 纵坐标,observer 图像监视器,用来监视图像的下载情况,接受图像装载信息(当图像完全载入时返回True,否则返回False)。
  
  在显示图像时,通常希望获得对图像的控制,从而以自己喜欢的各种方式实现媒体播放。为此,Java专门提供了用于跟踪包括图像和声音等多媒体对象的ImageObserver类和MediaTracker类,在本文程序中主要用到的是跟踪多幅图像状态的MediaTracker类。
  
  1.2 Java多线程并发功能
  
  目前,线程(Thread)已经为许多操作系统和应用开发系统所采用。线程是程序的单个控制流,具有顺序程序的特点,但是线程不是1个程序,它仅仅是程序的1个执行序列。线程具有很强的并发功能,在同一时刻可能有多个线程同时处于执行状态。线程是动态的,具有一定的生命周期,分别经历从创建、执行、阻塞直到消亡的过程。Java语言中提供了专门的Thread类,以支持直接的多线程编程。Thread类提供了对线程的控制方法,如Start(),Stop(),Run()、Suspend()、resume()、Sleep()以及Run()方法等等,它们可以对线程的状态进行控制。并可以运用SetPriority()方法设置线程的运行优先顺序。Thread类的定义方法如下:
  
     Thread(ThreadGroup group,Runable target,String name)
  SetPriority()用来设置线程的优先级。线程优先级是1个介于MINPRIORITY(在类中定义为1)和MAXPRIORITY(在类中定义为10)之间的整数。线程不同的优先级决定了不同线程之间的切换。
  2 Java图像分割与合成的算法及实现
  
  Java程序首先将一个完整的图像下载,然后将其分割成20个单元拼图,即分为5行4列。在本例中特地将第20幅图像单元设为1个空白图像,以便拼图时用户交互操作使用。这些参数分别定义在相应的变量中。
  
     final int XCELLS=5;  //每行拼图的数目
  final int YCELLS=4;//每列拼图的数目
  final int ALLCELLS=20;//分割元素的数目
  final int EMPTY=19;//将第20单元,即cells[19]置成
  //空白图像
  然后将这些图像分割单元存于1个Cell类数组cells[]中,在这里Cell类中含有图像以及它的起始位置和当前位置,其具体定义如下:
  
     class Cell
  {int sx,sy; //起始位置
  int cx,cy; //当前位置
  Image img; //单元图像
  public Cell(Image img,int x,int y) //Cell类构造函数
  {this.img=img;
  sx=x;sy=y;} //给起始位置赋值为x,y
  }
  为了对每个图像分割单元进行状态跟踪,还需要建立1个MediaTracker类的实体(instance),然后调用addImage()方法,为每个要跟踪的图像指定1个唯一的标识符。标识符决定了图像获取时的优先顺序并使得图像能够独立完整地进行处理。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1601629.html

延伸阅读
Swing API的设计目标是强大、灵活和易用。非凡地,我们希望能让程序员们方便地建立新的Swing组件,不论是从头开始还是通过扩展我们所提供的一些组件。 出于这个目的,我们不要求Swing组件支持多线程访问。相反,我们向组件发送请求并在单一线程中执行请求。 本文讨论线程和Swing组件。目的不仅是为了帮助你以线程安全的...
当一个线程进入wait之后,就必须等其他线程notify/notifyall,使用notifyall,可以唤醒 所有处于wait状态的线程,使其重新进入锁的争夺队列中,而notify只能唤醒一个。注意,任何时候只有一个线程可以获得锁,也就是说只有一个线程可以运行synchronized 中的代码,notifyall只是让处于wait的线程重新拥有锁的争夺权,但是只会有一个获得锁并执行...
向日葵远程控制软件如何实现远程控制 向日葵远程控制拥有五秒快速而又强劲的内网穿透功力,融合了微软RDP远程桌面(3389),用户可以轻松在向日葵远程桌面协议和微软RDP协议中自由切换,享受最佳的远程桌面体验,那向日葵远程控制软件如何实现远程控制、管理、操作等一系列项目呢? 要想实现远控,需要先在远程主机电脑上安装向日葵远程...
Thread 创建线程的两种方法: 1、定义类继承Thread类,覆写类中的run方法,调用类对象的start方法,start方法启动线程,调用run方法。Thread类用于描述线程;该类定义一个功能run,用于存储线程要运行的代码。 2、定义类实现Runnable接口,覆盖Runnable接口中的方法,通过Thread类建立线程对象,将Runnable接口的子类对象作为实际参数传递给T...
标签: Android
Android手机如何进行定位与远程控制   Android系统自带的定位功能 此方法试用于安装有完整谷歌服务框架的Android手机,部分国行手机可能无法正常使用。 谷歌自带了数据备份、定位、防盗(响铃、锁定、清空)等功能,使用该服务,需要在手机上安装谷歌服务框架(在应用市场搜索即可),并登录谷歌账号。 在谷歌服务应用...

经验教程

943

收藏

76
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部