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

Java线程控制的图像分割与合成(转)(@more@)摘要:使用Java对WEB静态图像进行分割重组,然后根据用户的交互操作合成显示,并利用线程对程序的并发性加以控制,从而达到图像显示的动态性和交互性效果。
关键词:Java语言类类线程线程

Java是一种面向对象的编程语言。它具有与平台无关,面向对象,动态,安全等特点,允许直接使用多线程方式进行编程,对程序进行并发控制。Java还支持分布式网络操作,从而能够方便地进行网络文件对象的存取利。用Java语言本身提供的绘图功能,可以绘制一些简单的图形。而对于复杂图形,一般先用绘图软件制成图像,然后采用Java所提供的方法对图像下载并进行处理和控制,从而实现静态图像的动态显示。
1 Java图像处理与线程的并发控制
1.1 Java图像处理
Java语言提供了丰富的类(类),接口(接口)以及相应的调用方法(方法),使用这些类或接口,可以定义自己的类或子类,充分利用Java面向对象的特性进行编程。在java.awt包中,提供了专门的图像类,它是一种抽象类,可提供抽象的方法描绘图片的一些共同特性。而在Applet类和Tookit类中都提供了2种getImage()方法下载图像,分别根据绝对地址和相对地址查询所要下载的图像。通常采用相对地址的下载方法,它的语法定义及功能如下:
1。公众形象getImage (URL URL字符串名称)
功能:根据相对地址下载图像。
参数:URL ? ? URL(统一资源定位)基地址,
名字? ?图像文件名。
获取图像后就可以调用图形类提供的drawImage()方法显示图像。
2。公共drawImage(图片img, int x, int y,观察者)
功能:在指定位置显示图像。
参数:img ? ?待显示图像,x ? ?横坐标,y ? ?纵坐标,观察者? ?图像监视器,用来监视图像的下载情况,接受图像装载信息(当图像完全载入时返回真,否则返回假)。
在显示图像时,通常希望获得对图像的控制,从而以自己喜欢的各种方式实现媒体播放。为此,Java专门提供了用于跟踪包括图像和声音等多媒体对象的ImageObserver类和MediaTracker类,在本文程序中主要用到的是跟踪多幅图像状态的MediaTracker类。
1.2 Java多线程并发功能
目前,线程(线程)已经为许多操作系统和应用开发系统所采用。线程是程序的单个控制流,具有顺序程序的特点,但是线程不是1个程序,它仅仅是程序的1个执行序列。线程具有很强的并发功能,在同一时刻可能有多个线程同时处于执行状态。线程是动态的,具有一定的生命周期,分别经历从创建,执行,阻塞直到消亡的过程. Java语言中提供了专门的线程类,以支持直接的多线程编程.Thread类提供了对线程的控制方法,如开始(),停止(),()运行,暂停(),(),恢复睡眠()以及运行()方法等等,它们可以对线程的状态进行控制。并可以运用SetPriority()方法设置线程的运行优先顺序.Thread类的定义方法如下:
线程(Runable ThreadGroup集团目标字符串名称)
SetPriority()用来设置线程的优先级。线程优先级是1个介于MINPRIORITY(在类中定义为1)和MAXPRIORITY(在类中定义为10)之间的整数。线程不同的优先级决定了不同线程之间的切换。
Java 2图像分割与合成的算法及实现
Java程序首先将一个完整的图像下载,然后将其分割成20个单元拼图,即分为5行4列。在本例中特地将第20幅图像单元设为1个空白图像,以便拼图时用户交互操作使用。这些参数分别定义在相应的变量中。
最后int伊势亚=5;//每行拼图的数目
最后int YCELLS=4;//每列拼图的数目
最后int ALLCELLS=20;//分割元素的数目
最后int空=19;//将第20单元,即细胞[19]置成
//空白图像
然后将这些图像分割单元存于1个单元格类数组细胞[]中,在这里细胞类中含有图像以及它的起始位置和当前位置,其具体定义如下:

{类细胞int sx, sy;//起始位置
int残雪,cy;//当前位置
图像编码器;//单元图像
公共细胞(图像编码器,int x, int y)//细胞类构造函数
{this.img=img;
sx=x, sy=y;}//给起始位置赋值为x, y}

为了对每个图像分割单元进行状态跟踪,还需要建立一个MediaTracker类的实体(实例),然后调用addImage()方法,为每个要跟踪的图像指定1个唯一的标识符。标识符决定了图像获取时的优先顺序并使得图像能够独立完整地进行处理。
MediaTracker追踪=new MediaTracker(这)
//为当前使用类建立一个MediaTracker实体,用于跟踪类
//上的图像
细胞[空白]=新细胞(createEmpty (), toPoint(空的)方式,toPoint(空).y);
tracker.addImage(细胞[空白]。img, 0),
//调用createEmpty()方法产生空白图像,并加入到所跟踪

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