Java图形与图像处理
Java中的图形图像处理和特征提取

Java中的图形图像处理和特征提取图形图像处理和特征提取是Java编程中的重要领域,它们在计算机视觉、图像识别、模式识别等应用领域中起着关键作用。
本文将介绍Java中的图形图像处理和特征提取的基本概念、常用算法和相关工具。
一、图形图像处理图形图像处理是指对图像进行改变、增强、重建等操作的一系列技术方法。
在Java中,图形图像处理通常涉及图像的读取、保存、调整、滤波、变换、合并等操作。
下面我们将介绍几种常见的图形图像处理技术及其在Java中的实现方式。
1.图像读取与保存:Java中可以使用ImageIO类来读取和保存图像文件。
例如,可以使用以下代码读取一张图片:```BufferedImage img = ImageIO.read(new File("image.jpg"));```然后可以使用以下代码将图像保存到文件中:```ImageIO.write(img, "jpg", new File("output.jpg"));```2.图像调整:图像的调整包括亮度、对比度、饱和度等的调整。
Java中可以使用RescaleOp类来实现图像的调整。
例如,以下代码将图像的亮度调整为原来的两倍:```float scaleFactor = 2.0f;RescaleOp op = new RescaleOp(scaleFactor, 0, null);BufferedImage adjustedImg = op.filter(img, null);```3.图像滤波:图像滤波是对图像进行模糊、锐化、边缘检测等操作。
Java中可以使用ConvolveOp类来实现图像的滤波。
例如,以下代码使用一个3x3的均值滤波器对图像进行模糊处理:```float[] matrix = { 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f,1/9f, 1/9f, 1/9f };ConvolveOp op = new ConvolveOp(new Kernel(3, 3, matrix));BufferedImage filteredImg = op.filter(img, null);```4.图像变换:图像变换是对图像进行旋转、缩放、翻转等操作。
java图形图象处理论文

摘要随着计算机技术的迅速发展,数字图像处理技术在医学领域的研究和应用日益深入和广泛。
现代医学已越来越离不开医学图像处理技术。
医学图像处理技术在临床诊断、教学科研等方面发挥了重要的作用。
计算机图像处理技术与影像技术的结合从根本上改变了医务人员进行诊断的传统方式。
充分地利用这些技术可以提高诊断的正确性和准确性,提高诊断效率,降低医疗成本,可以更加充分地发挥各种医疗设备的功能。
而且,随着数字化、智能化进程的深人,图像处理技术在医疗卫生领域将会有更加广阔的应用前景。
Java是Sun公司推出的一种面向对象编程语言。
Java非常适合于企业网络和Internet 环境,现已成为Internet中最受欢迎、最有影响的编程语言之一。
目前国内使用Java语言开发的图像处理系统比较少,这也增加了这方面的研究价值。
本文首先对图像增强和图像分割中的几种算法进行了介绍,包括线性灰度变换,伪彩色处理,平滑处理,中值滤波,阈值分割,边缘检测等。
然后用Java语言对上述各算法编程实现,并设计Java GUI(图形用户界面)用来显示图像处理的结果,以及创建一个数据库用于存储医学图像。
关键词:医学图像;图像增强;图像分割;面向对象AbstractAs the computer technique’s quickly development, the image process technique having been more deeply and widely in the use and study of medical science. The modern medical science can not work well without the medical image processing technology; it has made an important use in clinical diagnosis and education study. The combination of the image processing technique and imaging technique has changed the way that traditional diagnosis. Make adequately use of this techniques will be increase accuracy, increase the efficiency of diagnosis, decrease the cost of medical treatment and make the most use of function with medical treatment equipments. Moreover, as the deeply with the arithmetic figure and the intelligence, the image processing technique will have a more wonderful future.Java is a kind of object-oriented programming language from the company of Sun. The Java is becoming a most welcome and influence programming language which suits for the business network and the environment of internet. Currently, use Java language to developed image processing system is not very frequency in our country. So, this is a cause of increasing the value of study.This project introduces some kinds of algorithms in image enhancement and image segmentation. It includes linear grey level transformation, pseudo-color processing, smooth processing, median filter, threshold segmentation, edge detection and so on. Then, use Java to program and realize. And show the result of image processing using Java GUI (Graphical User Interface), as well as create a database to stock medical image.Key Words: medical image; image enhancement; image segmentation; object-oriented目录1引言 (1)2医学图像处理概述 (3)2.1什么是医学图像处理 (3)2.2医学图像处理及研究内容 (3)2.2.1超声图像 (3)2.2.2X射线图像 (4)2.2.3磁共振成像 (5)2.2.4核医学成像 (6)2.3医学图像处理技术新进展 (7)3 Java语言的特点 (11)3.1面向对象编程 (11)3.1.1抽象 (11)3.1.2面向对象编程的3个原则 (12)3.2 Java的特性 (13)3.3 Java语言的前景 (15)4 Java语言实现图像处理 (16)4.1图像增强技术 (16)4.1.1灰度变换 (17)4.1.2伪彩色处理 (19)4.1.3平滑化处理 (22)4.1.4其他图像增强技术 (24)4.2图像分割技术 (25)4.2.1阈值分割法 (25)4.2.2边缘检测法 (28)4.3图像复原技术 (31)4.4本章小结 (33)5设计流程 (34)5.1主流程图 (34)5.2图像处理界面 (35)5.3图像的加载 (36)5.4图像的处理 (38)5.5数据库的建立 (42)6开发工具 (44)6.1 JCreator概述 (44)6.2 JCreator编辑界面的组成 (44)结论 (47)致谢 (48)参考文献 (49)附录A 英文原文 (50)附录B 中文翻译 (59)附录C 源程序 (66)1 引言数字图像处理技术是20世纪60年代随着计算机技术和超大规模集成电路的发展而产生、发展和不断成熟起来的一个新兴技术领域,它在理论上和实际应用中都取得了巨大的成就。
利用Java开发医疗影像处理系统的设计与实现

利用Java开发医疗影像处理系统的设计与实现一、引言随着医疗技术的不断发展,影像处理在医疗领域中扮演着越来越重要的角色。
医疗影像处理系统可以帮助医生更准确地诊断疾病,提高医疗效率,改善患者治疗体验。
本文将介绍利用Java语言开发医疗影像处理系统的设计与实现过程。
二、系统架构设计1. 系统功能模块划分在设计医疗影像处理系统时,我们可以将系统功能划分为以下几个模块: - 影像数据管理模块:负责管理医学影像数据的采集、存储和检索。
- 影像处理模块:包括图像预处理、特征提取、图像分割等功能。
- 影像诊断模块:利用机器学习和深度学习算法进行影像诊断。
- 报告生成模块:根据诊断结果生成专业的医学报告。
2. 技术选型在开发医疗影像处理系统时,我们选择Java作为主要开发语言的原因有以下几点: - Java具有良好的跨平台性,可以在不同操作系统上运行。
- Java拥有丰富的第三方库和框架,便于开发人员快速开发应用。
- Java语言本身具有较高的安全性和稳定性,适合开发医疗领域的应用。
三、系统实现1. 数据管理模块实现数据管理模块主要负责医学影像数据的采集、存储和检索。
我们可以利用Java中的Spring框架来实现数据管理模块,通过Spring Data JPA来操作数据库,实现数据的持久化存储。
示例代码star:编程语言:java// 示例代码@Repositorypublic interface ImageRepository extendsJpaRepository<Image, Long> {List<Image> findByPatientId(Long patientId);}示例代码end2. 影像处理模块实现影像处理模块包括图像预处理、特征提取、图像分割等功能。
我们可以利用Java图像处理库如ImageJ或OpenCV来实现这些功能,通过调用相应的API来对影像数据进行处理。
java中bufferedimage的用法

文章标题:深度解析Java中BufferedImage的用法与应用一、介绍在Java编程中,BufferedImage是一个常用的类,用于处理图像的像素数据。
它提供了丰富的方法和功能,可以用于图像的读取、处理和保存,同时也支持图像的格式转换和像素操作。
在本文中,我们将深度探讨BufferedImage的用法与应用,并介绍其在Java图像处理中的重要性。
二、BufferedImage的基本用法1. BufferedImage的创建在Java中,我们可以通过ImageIO类的read()方法来创建一个BufferedImage对象,例如:```BufferedImage image = ImageIO.read(new File("image.jpg")); ```2. BufferedImage的基本操作BufferedImage类提供了getRGB()和setRGB()方法来读取和修改像素值,同时也支持获取宽度、高度和颜色模型等属性。
三、BufferedImage的高级功能1. 图像格式转换BufferedImage可以方便地进行图像格式的转换,例如将JPEG格式的图像转换为PNG格式:```BufferedImage originalImage = ImageIO.read(newFile("image.jpg"));ImageIO.write(originalImage, "png", new File("image.png"));```2. 像素级操作BufferedImage支持对图像进行像素级操作,例如修改像素颜色、绘制图形和文字等。
四、BufferedImage的应用场景1. 图像处理在图像处理应用中,BufferedImage可以用于图像的读取、编辑和保存,同时也支持图像的缩放、裁剪和旋转等操作。
2. 视频处理在实时视频处理中,BufferedImage可以用于处理视频帧的像素数据,例如视频流的转换、滤镜效果的应用和视频数据的提取等。
详解javagoogleThumbnails图片处理

详解javagoogleThumbnails图⽚处理在后端开发的过程中,都逃不开与⽂件传输特别是图⽚的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照⽚更是越来越清晰,但是照⽚⽂件的⼤⼩也是越来越⼤了,⼿机拍照⼩则2M⼤则30M这在⽹络传输过程中谁顶得住呀!所以在⽤户发布照⽚,后端对图像⽂件进⾏保存的过程中压缩图像⽂件是必不可少的⼀个过程。
⽽Thumbnails就是⼀个很好的图像处理⼯具,他把复杂的图像处理封装的很好,只需要短短的⼀⾏代码就能完成对图像的压缩。
Thumbnails⽀持:指定⼤⼩进⾏缩放按照⽐例进⾏缩放不按照⽐例,指定⼤⼩进⾏缩放旋转⽔印裁剪转化图像格式输出到OutputStream输出到BufferedImage输出到ByteArrayOutputStream(OutputStream)输出到ByteArrayInputStream(InputStream)输出到byte[]Thumbnails导⼊依赖<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>⼀,指定⼤⼩进⾏缩放//size(宽度, ⾼度)/** 若图⽚横⽐200⼩,⾼⽐300⼩,不变* 若图⽚横⽐200⼩,⾼⽐300⼤,⾼缩⼩到300,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼩,横缩⼩到200,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼤,图⽚按⽐例缩⼩,横为200或⾼为300*/Thumbnails.of("images/a380_1280x1024.jpg").size(200, 300).toFile("c:/a380_200x300.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(2560, 2048).toFile("c:/a380_2560x2048.jpg");⼆,单个图⽚等⽐例缩放File file = new File("c:\\test.png");Thumbnails.of(new FileInputStream(file)).scale(3.0).toFile(new File("c:\\yyyyy.png"));3.0是⼀个double类型的数字,缩放⽐例,⼤于1就是变⼤,⼩于1就是缩⼩三,不按照⽐例,指定⼤⼩进⾏缩放//keepAspectRatio(false) 默认是按照⽐例缩放的Thumbnails.of("images/a380_1280x1024.jpg").size(200, 200).keepAspectRatio(false).toFile("c:/a380_200x200.jpg");四,批量产⽣缩略图Thumbnails.of(new File("D:\\pics").listFiles()).scale(0.2).outputFormat("png").toFiles(Rename.PREFIX_DOT_THUMBNAIL);五,控制图⽚质量,图⽚尺⼨不变File fromPic = new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_1531741954688.jpeg");File toPic =new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_08.jpeg");Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);outputQuality就是⽤来控制图⽚质量的六,给图⽚加⽔印Thumbnails.of(fromPic).scale(0.8).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(waterPic), 0.5f).outputQuality(0.8f).toFile(toPic);//watermark(位置,⽔印图,透明度)Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("c:/a380_watermark_bottom_right.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("c:/a380_watermark_center.jpg");fromPic是原图,waterPic是⽔印图⽚,toPic是⽣成后的图⽚七,旋转图⽚Thumbnails.of(fromPic).scale(0.5).rotate(90).toFile(toPic);⼋,图⽚裁剪Thumbnails.of(fromPic).sourceRegion(Positions.CENTER, 300, 300).scale(1.0).toFile(toPic);//sourceRegion()//图⽚中⼼400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.CENTER, 400,400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_center.jpg");//图⽚右下400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400,400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_bootom_right.jpg");//指定坐标Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_coord.jpg");九,WEB输出流图⽚某些应⽤上传的图⽚可能质量⽐较⾼,但是⽤户在列表浏览的时候,⼜不想原图展⽰,因为带宽要求较⾼,此时可以降低图⽚质量(上⾯提到的outputQuality),以outputstream输出流的⽅式response给浏览器去展⽰@RequestMapping("/getImages")public void getImages(HttpServletRequest request, HttpServletResponse response) throws IOException {Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(response.getOutputStream());}⼗,图像的格式转换//outputFormat(图像格式)Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).outputFormat("png").toFile("c:/a380_1280x1024.png");Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).outputFormat("gif").toFile("c:/a380_1280x1024.gif");⼗⼀,输出到BufferedImage//asBufferedImage() 返回BufferedImageBufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).asBufferedImage();ImageIO.write(thumbnail, "jpg", new File("c:/a380_1280x1024_BufferedImage.jpg"));⼗⼆,输出到ByteArrayOutputStream(OutputStream)ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(thumbnailOutputStream);⼗三,输出到ByteArrayInputStream(InputStream)ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(thumbnailOutputStream);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(thumbnailOutputStream.toByteArray());⼗三,输出到byte[]ByteArrayOutputStream handlerOutputStream = new ByteArrayOutputStream();Thumbnails.of(inputStream).scale(1f).outputQuality(0.25f).outputFormat("jpg").toOutputStream(handlerOutputStream);byte[] bytes = handlerOutputStream.toByteArray();到此这篇关于java google Thumbnails 图⽚处理的⽂章就介绍到这了,更多相关java google Thumbnails 图⽚处理内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
java中的imageio.write 用法

一、介绍1. 定义在Java编程语言中,imageio.write是一个用于将图像数据写入文件或其他输出流的方法。
2. 作用imageio.write的作用是将图像数据保存为各种不同格式的文件,比如JPEG、PNG、BMP等。
它可以将内存中的图像数据转换为特定格式的图像文件,并保存到磁盘上或者通过网络传输出去。
3. 应用场景imageio.write广泛应用于开发需要图像处理和图像保存功能的Java应用程序中,比如图片编辑软件、图像处理工具、网页设计应用等。
二、基本语法1. 方法签名imageio.write方法的基本语法如下:public static boolean write(RenderedImage im, String formatName, ImageOutputStream output)throws IOException在这个方法签名中,im是待写入文件的图像对象,formatName指定了要写入的图像格式(比如JPEG、PNG、BMP),output则是用于输出的流对象。
2. 返回值imageio.write方法返回一个boolean值,指示写入操作是否成功。
3. 异常处理在使用imageio.write方法时,需要处理可能抛出的IOException异常。
三、示例代码1. 保存为JPEG格式```javaimport javax.imageio.ImageIO;import java.io.File;import java.io.IOException;import java.awt.image.BufferedImage;public class ImageIOExample {public static void m本人n(String[] args) {BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);File outputfile = new File("saved.jpg");try {ImageIO.write(image, "jpg", outputfile);} catch (IOException e) {System.out.println("Error: " + e);}}}```2. 保存为PNG格式```javaimport javax.imageio.ImageIO;import java.io.File;import java.io.IOException;import java.awt.image.BufferedImage;public class ImageIOExample {public static void m本人n(String[] args) {BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);File outputfile = new File("saved.png");try {ImageIO.write(image, "png", outputfile);} catch (IOException e) {System.out.println("Error: " + e);}}}```四、注意事项1. 格式名称在使用imageio.write方法时,需要确保指定的格式名称是正确的,比如JPEG格式对应"jpg",PNG格式对应"png",否则会导致写入失败。
使用JAVA进行图像识别与处理的工具及技术

使用JAVA进行图像识别与处理的工具及技术引言:随着科技的不断发展,图像识别与处理已经成为了计算机科学领域的热门研究方向。
而JAVA作为一种广泛应用于软件开发的编程语言,也提供了丰富的工具和技术来支持图像识别与处理。
本文将介绍一些常用的JAVA图像处理工具和技术,并探讨其在实际应用中的优势和挑战。
一、图像处理工具1. OpenCVOpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。
它支持多种编程语言,包括JAVA。
通过使用OpenCV,开发人员可以轻松实现图像的读取、显示、滤波、边缘检测等常见操作。
同时,OpenCV还提供了一些高级功能,如人脸检测、目标跟踪等,使得图像处理更加便捷和高效。
2. Java Advanced Imaging (JAI)JAI是JAVA平台上的一组图像处理API,提供了丰富的图像处理功能。
它支持图像的读取、写入、缩放、旋转、滤波等操作,并且可以处理多种图像格式。
JAI还提供了一些高级功能,如图像合成、图像分析等,使得开发人员能够更加灵活地进行图像处理。
3. ImageJImageJ是一款基于JAVA的开源图像处理软件,提供了丰富的图像处理和分析功能。
它支持图像的读取、显示、滤波、分割等操作,并且提供了一些常用的图像分析算法,如形态学操作、图像测量等。
ImageJ还支持插件扩展,使得开发人员可以根据需求添加自定义的图像处理功能。
二、图像识别技术1. 机器学习机器学习是一种广泛应用于图像识别的技术。
通过训练模型,机器可以从大量的图像数据中学习特征,并对新的图像进行分类和识别。
JAVA提供了一些机器学习库,如Weka和DL4J,可以帮助开发人员实现图像分类、目标检测等任务。
2. 深度学习深度学习是一种基于神经网络的图像识别技术。
它通过多层次的神经网络模型,可以学习到更加复杂的图像特征,并实现更高精度的图像识别。
JAVA提供了一些深度学习库,如Deeplearning4j和DL4J,可以帮助开发人员构建和训练深度学习模型。
基于Java的图像内容识别与标注系统研究

基于Java的图像内容识别与标注系统研究随着互联网和移动设备的普及,图像数据在我们日常生活中扮演着越来越重要的角色。
然而,要对海量的图像数据进行有效管理和利用,就需要借助图像内容识别与标注系统。
本文将探讨基于Java语言开发的图像内容识别与标注系统的研究。
一、引言随着数字摄影技术的飞速发展,人们可以轻松地拍摄、存储和分享大量的图片。
然而,这也带来了一个新的问题:如何高效地管理这些海量的图片数据?传统的基于文本标签的检索方式已经无法满足用户对图片检索的需求,因此图像内容识别与标注技术应运而生。
二、图像内容识别技术图像内容识别是指通过计算机视觉技术对图像进行分析和理解,从而实现对图像内容的自动识别。
常见的图像内容识别技术包括目标检测、图像分类、物体识别等。
在基于Java开发的图像内容识别系统中,可以借助开源的深度学习框架如TensorFlow、Keras等来实现这些功能。
三、图像标注技术图像标注是指为图像添加描述性标签或关键字,以便用户更好地理解和检索图片。
图像标注技术可以通过自然语言处理和机器学习算法来实现。
在Java开发的图像标注系统中,可以利用NLP库如Stanford NLP或OpenNLP来进行文本处理,结合机器学习算法如支持向量机(SVM)或随机森林(Random Forest)来实现标注功能。
四、基于Java的图像内容识别与标注系统设计1. 系统架构设计基于Java语言的图像内容识别与标注系统通常采用客户端-服务器架构。
客户端负责上传图片数据,服务器端进行图像内容识别和标注,并将结果返回给客户端。
整个系统可以分为数据层、业务逻辑层和表示层三个部分。
2. 数据层设计数据层主要负责存储图片数据和相关的标签信息。
可以使用关系型数据库如MySQL或非关系型数据库如MongoDB来存储数据。
此外,还可以结合分布式文件系统如Hadoop HDFS来存储大规模的图片数据。
3. 业务逻辑层设计业务逻辑层包括图像内容识别算法和图像标注算法的实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例6-3】设置线条粗细
6.1.3 画布Canvas
画布Canvas类是一个用来绘制图 形的矩形组件,在画布中可以象在 Applet中那样绘制各种图形,也可 以响应鼠标和键盘事件。
1、创建
Canvas的构造方法没参数,所以使用 简单的语句就可以创建一个画布对象:
Canvas canvas1=new Canvas(); 在创建了 Canvas对象后,一定要调用
将指定的矩形设置为当 前的剪贴区。
【例6-2】 绘制用色彩填充的笑脸 图形。
6.1.2 Java 2D
graphics类还有一些不Graphics 2D可以解决这些问题。
绘制时,只要将Graphics 对象强制转化为Graphics 2D对象就行。
boolean drawImage(Image imgObj, int left, int top, ImageObserver imgOb) ;
【例6-8】用getImage()方法和 drawImage()方法加载和显示图像。
6.2.3 双 缓 冲
由于加载图像需要时间,这时我们 就会感觉屏幕在不断闪烁。
为了解决这个问题,在内存或显存中 开辟一块缓冲区,把加载的图像放到缓 冲区中。当图像加载完毕,我们再把图 像从缓冲区中调到屏幕上让它显示,由 于从缓冲区读取数据的速度很快就不会 出现闪烁了。这就称为双缓冲。
Java语言程序设计
主讲:张思民
仰恩大学Java课程组
第6章 Java图形与图像 处理
本章内容提要
1、图形与图像描绘 2、数字图像处理 3、java 3D基础
6.1 图形与图形的描绘
任何一个图形对象(ponent 的子类)使用java.awt.Grephics类提供 的绘图方法就可以画出线条、矩形、圆 形等图形。该方法为: public void paint(Graohics g);
2、 加载图像 获得图像的另一种方法是加载图像。这 通过使用由Applet类定义的getImage()方 法来实现。它有以下形式:
Image getImage(URL url)
Image getImage(URL url, String imageName)
3、显示图像
显示图像可以用drawImage()方法, drawImage()是Graphics类的方法。它有好 几种形式,我们将要用到下面的一种:
我们要用到awt的Image类和 java.awt.image包,awt的抽象类Image所 有图形图像类的父类,java.awt.image包 为创建和修改图像提供了技术支持。
6.2.1 图像文件
例:(1) 单一灰色
(2)渐变灰度。
6.2.2 图像的基本操作
图像最基本的操作有三种,它们是创建图像、加 载图像和显示图像。
【例6-5】通过一个窗体的文本框输入圆的半 径及坐标位置,在画布上绘制一个圆。以此 例说明,逻辑层和表现层间的数据传递。
(a) 逻辑层和表现层间的数据传递
(b) 在画布上绘制圆形
图6.6 逻辑层与表现层的设计模式示例
6.2 数字图像处理
数字图像处理技术就是将图像信号转 换成数字格式并利用计算机进行处理的 过程。
1、 创建图像对象 由于图像最终要在屏幕中显示出来,java.awt 的Component类提供了一个createImage()方法来 生成Image图像对象。 CreateImage()方法有两种形式: Image createImage(ImageProducer imgProd) ; Image createImage(int width, int height) ;
Graphics类的Set/get方法
getColor()
获得当前图形的色彩
setColor(Color c) 设置当前图形的色彩
getFont()
获得当前字体
setFont(Font font) 设置当前字体
getClip() setClip(int, int, int, int)
获取当前的剪贴板内容。
setSize()方法确定这个画布的大小。 Canvas具有自己的坐标系统,使用布
局管理器可以确定它在其他组件中的位 置,并且可以用布局管理器来进行版面 布局。
2、常用方法
我们在进行程序设计时,经常把要实现 的功能单独设计为一个类,而把显示这个功 能设计成另一个,我们把实现功能的类称为 业务逻辑层,而显示功能的类称为表现层。 这样,把逻辑层和表现层分开,有利于实现 代码重用。看下面的示例。
6.1.1 Graphics类
图6.1 组件的坐标系统
【例6-1】 绘制直线、矩形和圆的简单图 形。
Graphics类常用的绘图方法
方法 drawLine(int x1, int y1, int x2, int y2) drawRect(int x, int y, int w, int h)
drawOval(int x, int y, int w, int h)
drawArc(int x, int y, int w, int h, int s1, int s2) clearRect(int x1, int y1, int x2, int y2)
drawString(String s,int x,int y) drawImage(Image image, int x, int y, ImageObserver observer) drawImage(Image image, int x, int y,int w,int h, ImageObserver observer)
说明 绘制一条从(x1,y1)到(x2,y2)的直线 绘制一个顶点为(x,y),宽为w,高为 h的矩形 绘制一个在顶点为(x,y),宽为w,高 为h的矩形内接椭圆 绘制一段弧度为从s1到s1+s2的圆弧
用当前颜色填充的方法清除指定矩形 区。 在(x,y)处显示字符串s 在(x,y)处显示图像image, observer 为加载图像时的图像观察器 在w宽h高的矩形区域内显示图像,图 像能自动调整大小比例。