




已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java語言程序設計,清華大學出版社,第6章 java圖形與圖像處理,本章內容提要,6.1 圖形與圖形的描繪,任何一個圖形對象(java.awt.Component的子類)使用java.awt.Grephics類提供的繪圖方法就可以畫出線條、矩形、圓形等圖形。該方法為: public void paint(Graohics g);,6.1.1 Graphics類,【例6-1】 繪制直線、矩形和圓的簡單圖形。,圖6.1 組件的坐標系統(tǒng),Graphics類常用的繪圖方法,圖像的加載和顯示是異步進行的,圖像的生產(chǎn)者(ImageProducer)傳遞給圖像的消費者(ImageConsumer)一個與圖像相關的位,因為圖像的生產(chǎn)過程是一個異步行為,所以 AWT 也提供一個圖像觀察(ImageObserver),用來監(jiān)視圖像生產(chǎn)者的圖像生產(chǎn)過程。 因為 java.awt.Component 實現(xiàn) ImageObserver 接口,所以 AWT 中每個構件都是ImageObserver ,當一個給定的 ImageProducer 采取異步操作時,這個 ImageObserver 可以選擇是否被更新,Graphics類的Set/get方法,【例6-2】 繪制用色彩填充的笑臉圖形。,6.1.2 Java 2D,繪制時,只要將Graphics 對象強制轉化為Graphics 2D對象就行。,graphics類還有一些不足,例如缺少改變線條粗細的方法,也缺少填充一個對象的方法。Graphics 2D可以解決這些問題。,【例6-3】設置線條粗細,線段端點修飾風格簡介 常 量 名 稱常 量 值修 飾 辦 法 BasicStroke.CAP_BUTT0對線段端點不加任何修飾 BasicStroke.CAP_ROUND1在線段端點加半圓進行修飾,半圓的直徑為線段的寬度 BasicStroke.CAP_SQUARE2在線段端點加矩形進行修飾,矩形的寬度為線段寬度的一半,矩形的高度為線段的寬度,線段折點修飾風格簡介 常 量 名 稱常 量 值修 飾 辦 法 BasicStroke.JOIN_MITER0對線段折點不加任何修飾 BasicStroke.JOIN_ROUND1在折線段的兩端加半圓進行修飾,半圓的直徑為線段的寬度 BasicStroke.JOIN_BEVEL2將組成折點的兩條線段的外側延長至相交,然后填充被包的區(qū)域,【例6-4】填充圖形,GradientPaint類 構造函數(shù)GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2,boolean cyclic) 即從點(x1,y1)到點(x2,y2)進行漸變 Cyclic為true時,為循環(huán)模式。,6.1.3 畫布Canvas,畫布Canvas類是一個用來繪制圖形的矩形組件,在畫布中可以象在Applet中那樣繪制各種圖形,也可以響應鼠標和鍵盤事件。,1、創(chuàng)建,Canvas的構造方法沒參數(shù),所以使用簡單的語句就可以創(chuàng)建一個畫布對象: Canvas canvas1=new Canvas(); 在創(chuàng)建了 Canvas對象后,一定要調用setSize()方法確定這個畫布的大小。 Canvas具有自己的坐標系統(tǒng),使用布局管理器可以確定它在其他組件中的位置,并且可以用布局管理器來進行版面布局。,2、常用方法,我們在進行程序設計時,經(jīng)常把要實現(xiàn)的功能單獨設計為一個類,而把顯示這個功能設計成另一個,我們把實現(xiàn)功能的類稱為業(yè)務邏輯層,而顯示功能的類稱為表現(xiàn)層。這樣,把邏輯層和表現(xiàn)層分開,有利于實現(xiàn)代碼重用??聪旅娴氖纠?【例6-5】通過一個窗體的文本框輸入圓的半徑及坐標位置,在畫布上繪制一個圓。以此例說明,邏輯層和表現(xiàn)層間的數(shù)據(jù)傳遞。,(b) 在畫布上繪制圓形 圖6.6 邏輯層與表現(xiàn)層的設計模式示例,(a) 邏輯層和表現(xiàn)層間的數(shù)據(jù)傳遞,6.2 數(shù)字圖像處理,數(shù)字圖像處理技術就是將圖像信號轉換成數(shù)字格式并利用計算機進行處理的過程。 我們要用到awt的Image類和java.awt.image包,awt的抽象類Image所有圖形圖像類的父類,java.awt.image包為創(chuàng)建和修改圖像提供了技術支持。,6.2.1 圖像文件,例:(1) 單一灰色 (2)漸變灰度。,6.2.2 圖像的基本操作,圖像最基本的操作有三種,它們是創(chuàng)建圖像、加載圖像和顯示圖像。 1、 創(chuàng)建圖像對象 由于圖像最終要在屏幕中顯示出來,java.awt的Component類提供了一個createImage()方法來生成Image圖像對象。 CreateImage()方法有兩種形式: Image createImage(ImageProducer imgProd) ; Image createImage(int width, int height) ;,2、 加載圖像 獲得圖像的另一種方法是加載圖像。這通過使用由Applet類定義的getImage()方法來實現(xiàn)。它有以下形式: Image getImage(URL url) Image getImage(URL url, String imageName),3、顯示圖像 顯示圖像可以用drawImage()方法,drawImage()是Graphics類的方法。它有好幾種形式,我們將要用到下面的一種: boolean drawImage(Image imgObj, int left, int top, ImageObserver imgOb) ;,【例6-8】用getImage()方法和drawImage()方法加載和顯示圖像。,6.2.3 雙 緩 沖,由于加載圖像需要時間,這時我們就會感覺屏幕在不斷閃爍。 為了解決這個問題,在內存或顯存中開辟一塊緩沖區(qū),把加載的圖像放到緩沖區(qū)中。當圖像加載完畢,我們再把圖像從緩沖區(qū)中調到屏幕上讓它顯示,由于從緩沖區(qū)讀取數(shù)據(jù)的速度很快就不會出現(xiàn)閃爍了。這就稱為雙緩沖。,【例6-9】演示雙緩沖技術的效果。,我們創(chuàng)建了一個Image對象,然后在這個Image對象上(而不是在屏幕上)畫圖。畫圖需要用一個Graphics對象。這個Graphics對象可以通過getGraphics()方法來獲得。下面構造一個Graphics對象gc,并用紅色填充圖像。 Canvas c = new Canvas(); Image test = c.createImage(200, 100); Graphics gc = test.getGraphics(); gc.setColor(Color.red); gc.fillRect(0, 0, 200, 100); 這個圖像是不可見的,僅僅存在于內存中。為了真正顯示這個圖像,需調用drawImage()方法。,6.2.4 圖像處理技術,1、像素點數(shù)組的構成,像素點是一個具有Alpha(透明度)、Red(紅)、Green(綠)和Blue(藍)四個分量表示的整數(shù),記作0xAARRGGBB。其中A、R、G、B的取值從0f(十六進制)。 紅色: 0xffff0000 綠色: 0xff00ff00 藍色: 0xff0000ff 白色: 0xffffffff 黑色: 0xff000000 圖像的像素點其排列如圖6.14所示,我們按從左往右、從上往下的順序取出像素點,構成一整型數(shù)組。,圖6.14 像素數(shù)組元素的排列,2、 MediaTracker類,MediaTracker類用于加載多媒體圖像,使用時,先生成一個MediaTracker對象,再用它的addImage()方法來加載圖像。addImage()方法有以下一般形式: void addImage(Image imgObj, int imgID) void addImage(Image imgObj, int imgID, int width, int height),3、ImageProducer接口和MemoryImageSource 類,ImagePruducer是一個用于生成圖像數(shù)據(jù)對象的接口。實現(xiàn)該接口的對象要用整數(shù)型數(shù)組或字節(jié)型數(shù)組生成Image對象。 MemoryImageSource是用于生成新的圖像的類。它的構造函數(shù)如下: MemoryImageSource(int width, int height, int pixel , int offset, int scanLineWidth),4、PixelGrabber類,PixelGrabber類的作用是從現(xiàn)有的圖像中提取像素數(shù)據(jù)構造一個像素數(shù)組。 在使用PixelGrabber時,首先需要生成一個足夠大的int型的數(shù)組來存儲像素數(shù)據(jù),然后生成一個PixelGrabber實例對象,將提取到的圖像數(shù)據(jù)存入到一個矩形區(qū)域中。最后,這個實例對象中調用grabPixels()方法將數(shù)據(jù)值放進像素數(shù)組中。,【例6-11】將圖像進行反相處理示例。,6.3.1 Java 3D概述,Java 3D的安裝和運行 : 到其官方網(wǎng)站: /products/java-media/3D/ 下載最新的系統(tǒng)安裝程序。 Java 3D安裝完畢后,在JDK目錄下的jrelibext子目錄下,應有四個.jar文件:j3daudio.jar、j3dcore.jar、j3dutils.jar、vecmath.jar,在JDK目錄下的jrebin子目錄下,應有J3D.dll、j3daudio.dll、J3DUtils.dll文件。另外,在demo目錄下的java3d中有系統(tǒng)提供的示例程序。,6.3.2 Java 3D程序設計,1、Java 3D的基本體系結構,2、幾個基本概念,(1)虛擬空間 在Java3D中,虛擬空間被定義為結合一系列對象的三維空間。虛擬空間被用作最大的聚集體表現(xiàn)單位,同時也可被看作一個數(shù)據(jù)庫。 對于一個Java3D應用程序,必須定義一個虛擬空間才可以在“空間”中顯示三維圖像。,(2)坐標系統(tǒng) 默認情況下,Java3D的坐標系統(tǒng)是右旋的三維坐標體系 (3)場景 為了支持大型虛擬空間,Java3D提出了“場景Locale”的概念。一個場景和與它結合的坐標系一起組成了在虛擬空間之下的一個表現(xiàn)層。虛擬空間可以包含一個或多個場景。而所有其他的對象都附加在一個場景之中。,3、Java 3D設計方法,構造一個Java 3D應
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國豬動物營養(yǎng)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國燃氣煙機行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國煤氣罐行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃研究報告(版)
- 2025-2030年中國熱循環(huán)機行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國滑蓋拉鏈袋行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國湖北水電行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告
- 2025-2030年中國清香型白酒行業(yè)市場深度調研及競爭格局與投資研究報告
- 2025-2030年中國混凝土錨和和緊固件行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 財富管理投資協(xié)議
- 錦繡外灘施工方案
- 超高性能混凝土研究進展及工程應用199頁PPT_ppt
- 視覺心理學(全套400頁PPT課件)
- 塔式起重機大臂減臂使用的受力分析和計算
- 三年高考高考生物試題分項版解析 專題01 組成細胞的分子
- 電力供應與使用條例考試卷及答案
- 生物大分子晶體學基礎(I)2016
- 申請增值電信業(yè)務經(jīng)營許可證材料范本說明書
- 教你如何填省普通高中學生檔案
- 手工焊接(電烙鐵)課件
- 關于電商平臺對入駐經(jīng)營者的審核要求或規(guī)范文件
- 日用百貨購銷合同(完整版)
評論
0/150
提交評論