lap trinh java2d and 3d

Download Lap Trinh Java2D and 3D

If you can't read please download the document

Upload: duybillsl

Post on 01-Jul-2015

1.723 views

Category:

Documents


2 download

TRANSCRIPT

Lp trnh ha trn Java 2D v 3DPhn 1.............................................................................................................................9 Lp trnh ha vi Java 2D..........................................................................................9 Chng 1..................................................................................................................10 Tng quan v Java 2D API.......................................................................................10 1.1 Enhanced Graphics, Text, and imaging..........................................................10 1.2 Rendering Model............................................................................................11 1.2.1 Coordinate Systems.................................................................................12 1.2.1.1 User Space.......................................................................................12 1.2.1.2 Device Space....................................................................................13 1.2.2 Transforms...............................................................................................14 1.2.3 Fonts........................................................................................................15 1.2.4 Images......................................................................................................16 1.2.5 Fills and Strokes.......................................................................................17 1.2.6 Composites...............................................................................................18 Backward Compatibility and Platform independence..........................................19 1.3.1 Backward Compatibility..........................................................................19 1.3.2 Platform independence............................................................................21 1.4 The Java 2D API Packages.........................................................................21 Chng 2:.................................................................................................................25 Rendering with Graphics2D.....................................................................................25 2.1 Cc lp v giao din.......................................................................................26 2.2 Rendering Concepts........................................................................................27 2.2.1 Rendering Process....................................................................................28 2.2.2 Controlling Rendering Quality................................................................29 2.2.3 Stroke Attributes......................................................................................31 2.2.4 Fill Attributes...........................................................................................32 Qu trnh x l theo phin............................................................................34 2.2.5 Clipping Paths..........................................................................................34 2.2.6 Transformations.......................................................................................35 2.2.6.1 Constructing an AffineTransform....................................................37 2.2.7 Composite Attributes...............................................................................38 2.2.7.1 Managing Transparency..................................................................39 2.2.7.2 Transparency and images.................................................................40 2.3 Thit lp Graphics2Context............................................................................40 2.3.1 Setting Rendering Hints...........................................................................40 2.3.2 Specifying Stroke Attributes....................................................................41 2.3.2.1 Setting the Stroke Width..................................................................41 2.3.2.2 Specifying Join and Endcap Styles..................................................42 2.3.2.3 Setting the Dashing Pattern..............................................................42 2.3.3 Specifying Fill Attributes.........................................................................44 2.3.3.1 Filling a Shape with a Gradient.......................................................44 2.3.3.2 Filling a Shape with a Texture.........................................................45 2.3.4 Setting the Clipping Path.........................................................................46 2.3.5 Setting the Graphics2D Transform..........................................................48 2.3.6 Specifying a Composition Style..............................................................51 2.3.6.1 Using the Source Over Compositing Rule.......................................51 2.3.6.2 Increasing the Transparency of Composited Objects......................51 2.4 Rendering Graphics Primitives.......................................................................53 2.4.1 Drawing a Shape......................................................................................53 2.4.2 Filling a Shape.........................................................................................55 1

http://tailieuhay.com

Lp trnh ha trn Java 2D v 3D2.4.3 Rendering Text........................................................................................56 2.4.4 Rendering images....................................................................................56 2.5 Defining Custom Composition Rules.............................................................56 2.6 Rendering in a Multi-Screen Environment.....................................................57 Chng 3..................................................................................................................75 Cc i tng hnh ha.............................................................................................75 3.1 Giao din v lp..............................................................................................75 3.2 Cc khi nim hnh hc:.................................................................................78 3.2.1 Constructive Area Geometry...................................................................79 3.2.2 Bounds and Hit Testing...........................................................................80 3.3 Combining Areas to Create New Shapes........................................................88 Chng 4:.................................................................................................................94 Hin th Font v vn bn...........................................................................................94 4.1.Giao din v lp..............................................................................................94 4.2.Cc khi nim v Font....................................................................................96 4.3 Cc khi nim v Text Layout........................................................................98 4.3.1 V ch......................................................................................................99 4.3.2 Ordering Text.........................................................................................101 4.3.3 o v nh v vn bn............................................................................103 4.3.4 H tr thao tc vi vn bn....................................................................104 4.3.4.1 Hin th du nhc............................................................................104 4.3.4.2 Di chuyn du nhc........................................................................106 4.3.4.3 Hit Testing.....................................................................................107 4.3.4.4 nh du vng la chn................................................................108 4.3.5 Thc thi vic hin th vn bn trong ng dng Java .........................109 Qun l vic hin th vn bn.............................................................................110 4.4.1 Trnh by vn bn..................................................................................111 Hin th du nhc kp.....................................................................................112 4.4.3 Di chuyn du nhc................................................................................113 4.4.4 Hit Testing.............................................................................................114 4.4.5 nh du vng la chn........................................................................115 4.4.6 Querying Layout Metrics.......................................................................115 4.4.7 V vn bn trn nhiu dng...................................................................116 Chng 5................................................................................................................126 To nh.......................................................................................................................126 5.1 Cc giao din v cc lp..........................................................................126 5.1.1 Cc giao din imaging (imaging interfaces).........................................127 5.1.2 Cc lp d liu nh(image Data Classes)..............................................127 5.1.3 image Operation Classes........................................................................129 5.1.4 Sample Model Classes...........................................................................130 Color Model Classes.......................................................................................131 5.1.6 Exception Classes..................................................................................132 5.2 Immediate Mode imaging Concepts.............................................................133 5.2.1 Terminology...........................................................................................135 5.3 Using Bufferedimages..................................................................................136 5.3.1 Creating a Bufferedimage......................................................................136 5.3.2 Drawing in an Offscreen Buffer............................................................137 5.3.2.1 Creating an Offscreen Buffer.........................................................138 5.3.2.2 Drawing in an Offscreen Buffer....................................................140 5.3.3 Manipulating Bufferedimage Data Directly..........................................141 2

http://tailieuhay.com

Lp trnh ha trn Java 2D v 3D5.3.4 Filtering a Bufferedimage......................................................................142 5.3.5 Rendering a Bufferedimage ..................................................................142 5.4 Managing and Manipulating Rasters............................................................150 5.4.1 Creating a Raster....................................................................................150 5.4.2 Parent and Child Rasters........................................................................151 5.4.4 The WritableRaster Subclass.................................................................151 5.5 Image Data and DataBuffers.........................................................................152 5.6 Extracting Pixel Data from a SampleModel.................................................153 5.7 ColorModels and Color Data........................................................................154 5.7.1 Lookup Table.........................................................................................155 5.8 image Processing and Enhancement.............................................................155 5.8.1 Using an image Processing Operation...................................................158 Chng 6................................................................................................................162 Mu sc...................................................................................................................162 6.1 Cc lp .........................................................................................................163 6.2 Nhng nh ngha v mu sc.......................................................................163 6.2.1 Khng gian mu....................................................................................164 6.2.1 Biu din mu.......................................................................................167 Chng 7 ...............................................................................................................171 In n........................................................................................................................171 7.1 Cc giao din v cc lp...............................................................................171 7.2.1 Supporting Printing................................................................................174 7.2.1.1 iu khin in (Job Control)...........................................................174 7.2.2 Page Painters..........................................................................................175 7.2.3 Printable Jobs and Pageable Jobs...........................................................177 7.2.4 Typical Life-Cycle of a PrinterJob................................................................178 7.3 Printing with Printables................................................................................181 7.3.2 Printing a File.........................................................................................185 7.4.1 Using a Pageable Job.............................................................................191 7.4.2 Using Multiple Page Painters................................................................193 Phn 2.........................................................................................................................206 Lp trnh ha vi Java 3D......................................................................................206 CHNG 1............................................................................................................207 NHP MN LP TRNH TRN JAVA 3D.........................................................207 1.1 Tng quan v Java 3D API ......................................................................207 1.2 Cc vn c bn v Java 3D API ..........................................................208 1.3 Xy dng th khung cnh.........................................................................208 1.3.1 Tha k cp cao t Java 3D API ..........................................................214 1.4 Cch thc vit mt chng trnh Java 3D....................................................216 1.4.1 Cng thc n gin vit mt chng trnh Java 3D ........................216 1.5 Mt vi thut ng trong Java 3D .................................................................221 1.6 V d n gin: HelloJava3Da .....................................................................223 1.6.1 Cc lp ca Java 3D Classes c s dng trong HelloJava3Da..............229 To nn hnh lp phng c kch thc c nh ra bi cc gi tr cho trc.....233 1.7 Quay hnh lp phng.................................................................................233 1.7.1 S kt hp ca cc php bin hnh: HelloJava3Db...............................235 1.8 Kh nng v hot ng.................................................................................236 1.8.1 Dch cc ni dung..................................................................................236 1.8.2 Kh nng ...............................................................................................237 1.9 Thm vo cc hnh vi animation..................................................................239 3

http://tailieuhay.com

Lp trnh ha trn Java 2D v 3D1.9.1 nh ngha cc hnh vi animation.........................................................240 1.9.2 Cc hm bin i v thi gian: nh x mt hnh vi vi thi gian........241 1.9.3 Lp danh mc cc vng.........................................................................242 1.9.4 V d v hnh vi: HelloJava3Dc ...........................................................243 1.9.5 Php bin hnh v kt hp cc hnh vi .V d: HelloJava3Dd .............246 CHNG 2............................................................................................................251 To cc hnh............................................................................................................251 2.1 H ta th gii o.....................................................................................251 2.2 Visual Object Definition Basics...................................................................252 2.2.1 An Instance of Shape3D Defines a Visual Object................................252 2.2.2 Node Components..................................................................................254 2.2.3 Defining Visual Object Classes.............................................................255 2.3 Cc lp tin ch hnh hc .............................................................................256 2.3.1 Box.........................................................................................................257 2.3.2 Cone ......................................................................................................259 2.3.3 Cylinder.................................................................................................259 2.3.4 Sphere....................................................................................................260 2.3.5 More About Geometric Primitives........................................................261 2.3.6 ColorCube .............................................................................................261 2.3.7 Example: Creating a Simple Yo-Yo From Two Cones ........................261 2.4 Cc lp ton hc...........................................................................................267 2.4.1 Point Classes .............................................................................................271 2.4.2 Color Classes.........................................................................................272 2.4.3 Vector Classes........................................................................................274 2.4.4 TexCoord Classes..................................................................................275 2.5 Cc lp hnh hc...........................................................................................276 2.5.1 GeometryArray Class ...........................................................................277 2.5.2 Subclasses of GeometryArray ..............................................................284 2.5.3 Subclasses of GeometryStripArray........................................................286 2.5.4 Subclasses of IndexedGeometryArray...................................................293 2.5.5 Axis.java is an Example of IndexedGeometryArray ............................296 2.6 Appearance and Attributes............................................................................296 2.6.1 Appearance NodeComponent................................................................298 2.6.2 Sharing NodeComponent Objects ........................................................298 2.6.3 Attribute Classes ...................................................................................299 2.6.4 Example: Back Face Culling ................................................................310 2.7 Bounds and Scope ........................................................................................320 2.7.1 Bounds Node Components ...................................................................321 2.7.2 BoundingLeafa Node ............................................................................325 2.7.3 Scope......................................................................................................327 2.8 Hnh hc nng cao........................................................................................329 2.8.1 Multiple Geometries in a Single Shape3D ...........................................329 2.8.2 GeometryArray .....................................................................................332 2.8.4 AlternateAppearance ......................................................340 2.9 Clipping Ct xn........................................................................................343 2.9.1 View Defines a Frustum........................................................................343 2.9.2 Clip Node ..............................................................................................345 2.9.4 ModelClip Example ..............................................................................346 CHNG 3............................................................................................................350 TO NI DUNG....................................................................................................350 4

http://tailieuhay.com

Lp trnh ha trn Java 2D v 3D3.1 Ni dung chnh..............................................................................................350 3.1.1 GeometryInfo.........................................................................................351 3.2.1 Mt v d n gin v GeometryInfo........................................................351 3.2.2 S dng GeometryInfo..........................................................................352 3.2.3 Mt s lp thng dng c lin quan n GeometryInfo........................353 Loaders................................................................................................................358 Mt v d n gin s dng leader.................................................................359 Cc loader ph bin...........................................................................................360 3.3.3 Giao din ca gi Loader v lp c s...............................................361 Vit mt loader...................................................................................................365 Cng vic ca mt loader...............................................................................365 Hm to lp Loader........................................................................................366 Vit mt File Loader n gin........................................................................368 Text2D................................................................................................................379 3.5.1 V d Text2D n gin..........................................................................380 3.5.2 Lp Text2D............................................................................................380 Text3D................................................................................................................382 Mt v d Text3D...........................................................................................382 Nhng lp lin quan to ra i tng Text3D...........................................384 Nn khng gian ha ......................................................................................391 Mt v d background.....................................................................................391 Lp Background.............................................................................................392 CHNG 4............................................................................................................396 TNG TC.........................................................................................................396 4.1 Hnh vi: C s ca tng tc v hot hnh...................................................397 4.1.1 ng dng ca hnh vi............................................................................397 4.1.2 Tng quan lp Behaviour......................................................................399 4.2 C bn v hnh vi.........................................................................................399 4.2.1 Vit mt lp Behaviour.........................................................................400 4.2.2 S dng mt lp Behaviour...................................................................405 4.2.3 Cc hm API trong lp Behaviour.........................................................409 4.3 iu kin kch hot: Cch kch hot cc hnh vi..........................................412 4.3.1 iu kin kch hot................................................................................413 4.3.2 WakeupCriterion....................................................................................414 4.3.3 Quy nh lp WakeupCriterion.............................................................414 4.3.4 Thnh phn ca WakeupCondition .......................................................430 4.4 Lp Behaviour tin ch x l bn phm........................................................432 4.4.1 Mt v d n gin.................................................................................433 4.4.2 Lp KeyNavigatorBehaviour v KeyNavigator..................................435 4.5 Lp tin ch tng tc vi chut...................................................................437 4.5.1 S dng lp MouseBehaviour ..............................................................437 4.5.2 Mouse Behaviour Foundation................................................................442 4.5.3 Cc lp MouseBehaviour .....................................................................444 4.5.4 Mouse Navigation..................................................................................447 4.6 Picking Object...............................................................................................450 4.6.1 Using Picking Utility Classes................................................................454 4.6.2 Cc hm API c bn trong cc lp Picking ..........................................458 4.6.3 Cc lp picking......................................................................................467 4.6.4 Cc lp Picking Behavior .....................................................................471 CHNG 5............................................................................................................474 5

http://tailieuhay.com

Lp trnh ha trn Java 2D v 3DHot Hnh................................................................................................................474 Animation - Hot hnh:.......................................................................................476 i tng Interpolator v Alpha vi hot nh da thi gian.............................477 Alpha...................................................................................................................477 S dng cc i tng Interpolator v Alpha:...................................................480 V d s dng lp Alpha v RotationInterpolator:.............................................480 Alpha API:..........................................................................................................486 Cc lp hnh vi Interpolator :.............................................................................489 Core Interpolator API:.......................................................................................504 Cc lp i tng ni suy ng:......................................................................513 Lp Billboard :........................................................................................................522 S dng i tng Billboard .............................................................................523 Chng trnh v d s dng Billboard ...............................................................525 Giao din lp trnh ng dng ca Billboard (Billboard API)...........................529 OrientedShape3D................................................................................................531 Giao din lp trnh ng dng ca OrientedShape3D..........................................532 V d s dng OrientedShape3D........................................................................533 Hot nh mc chi tit (Level Of Detail Animations).........................................535 S dng i tng DistanceLOD.......................................................................536 Cc li thng gp khi s dng LOD ............................................................537 V d s dng DistanceLOD..............................................................................537 Giao din lp trnh ng dng DistanceLOD API...............................................544 Morph .................................................................................................................545 S dng i tng Morph ..................................................................................546 V d s dng Morph .........................................................................................547 Giao din lp trnh ng dng Morph API..........................................................553 Giao din GeometryUpdater...................................................................................554 S dng GeometryUpdater.................................................................................555 Chng trnh v d h thng phn t i phun nc s dng GeometryUpdater ............................................................................................................................556

Li ni u S pht trin ca khoa hc, k thut, ngh thut, kinh doanh, v cng ngh lun lun ph thuc vo kh nng truyn t thng tin ca chng ta, hoc thng qua cc bit d liu lu tr trong microchip hoc thng qua giao tip bng ting ni. Cu chm ngn t xa xa mt hnh nh c gi tr hn c vn li" hay "trm nghe khng bng mt thy" cho thy ngha rt ln ca hnh nh trong vic chuyn ti thng tin. Hnh nh bao gi cng c cm nhn nhanh v d dng hn, c bit l trong trng hp bt ng v ngn ng. Do khng c g ngc nhin khi m ngay t khi xut hin my tnh, cc nh nghin cu c gng s dng n pht sinh cc nh trn mn hnh. Trong sut gn 50 nm pht trinhttp://tailieuhay.com 6

Lp trnh ha trn Java 2D v 3D ca my tnh, kh nng pht sinh hnh nh bng my tnh ca chng ta t ti mc m by gi hu nh tt c cc my tnh u c kh nng ha. ha my tnh l mt trong nhng lnh vc l th nht v pht trin nhanh nht ca tin hc. Ngay t khi xut hin, ha my tnh c sc li cun mnh lit, cun ht rt nhiu ngi nhiu lnh vc khc nhau nh khoa hc, ngh thut, kinh doanh, qun l, ... Tnh hp dn v a dng ca ha my tnh c th c minh ha rt trc quan thng qua vic kho st cc ng dng ca n. Ngy nay, ha my tnh c s dng trong rt nhiu lnh vc khc nhau nh cng nghip, thng mi, qun l, gio dc, gii tr, S lng cc chng trnh ha ng dng tht khng l v pht trin lin tc.Trong lnh vc cng nghip,CAD(computer-aided design) c s dng hu ht trong vic thit k cc cao c, t, my bay, tu thy, tu v tr, my tnh,Trong lnh vc gii tr,ngh thut, ha my tnh gip ta to ra cc chng trnh tr chi,cc k xo in nh cho cc nh lm phim,hay ngay chnh giao din ha lm nng cao kh nng giao tip gia ngi v my tnh. c th lm c nhng ng dng ha hu ch cho cuc sng,trc ht chng ta cn phi c mt nn tng vng chc v lp trnh ha.C rt nhiu ngn ng h tr lp trnh ha my tnh,mi ngn ng c xy dng trn nhng th vin ha ring,c nhng th mnh ring.V khi ni v lp trnh ha,chng ta khng th khng ni n ngn ng Java,mt ngn ng rt mnh trong lnh vc ny.Vi mc ch nghin cu,tm hiu v mang n cho nhng ai mun tm hiu v lp trnh ha mt ti liu thit thc,nhm chng em chn ti lm tutorial v lp trnh ha trn nn tng ngn ng lp trnh Java,da trn cc ti liu training trn mng ca hng Sun.V l ln u lm ti liu tham kho

http://tailieuhay.com

7

Lp trnh ha trn Java 2D v 3D nn chng em khng trnh khi sai st.Chng em mong thy xem xt v gp cho ti liu ny.Chng em chn thnh cm n.

http://tailieuhay.com

8

Lp trnh ha trn Java 2D v 3D

Phn 1 Lp trnh ha vi Java 2D

http://tailieuhay.com

9

Lp trnh ha trn Java 2D v 3D

Chng 1 Tng quan v Java 2D API

Java 2D API tng cng v kh nng ho, vn bn v nh ca Abstract Windowing Toolkit (AWT), gip pht trin v giao din ngi s dng v ng dng v JAVA trong mt s lnh vc mi.Cng vi kh nng mnh v ho ,phng ch v nh trong cc API, th Java 2D API cn h tr nhng thuc tnh v thnh phn mu sc c nng cao, v thnh cng trong vic biu din cc b mt hnh hc tu v mt kiu t trt chun cho my in v thit b hin th. Java 2D API cng cho php to ra cc th vin ho m rng,nh cc th vin ca CAD-CAM v cc th vin to hiu ng c bit cho nh v ho, cng nh vic to ra cc b lc c/vit file nh v ho.Khi c s dng kt hp vi Java Media Framework Java Media APIs khc ,th Java 2D APIs c th c s dng to ra v hin th hin thc o v cc dng a phng tin khc. Java Animation v Java Media Framework APIs da trn Java 2D API h tr vic t trt(rendering). 1.1 Enhanced Graphics, Text, and imaging Nu cc phin bn trc ca AWT ch cung cp cc gi t trt(rendering) n gin ch ph hp cho vic rendering cc trang HTML n gin,m khng p ng cho cc dng ho,vn bn v nh phc

http://tailieuhay.com

10

Lp trnh ha trn Java 2D v 3D tp. Th Java 2D API cung cp gi t trt y cc tnh nng bng cch m rng AWT h tr cho ho v cc thao tc rendering. V d nh thng qua cc lp ho cho php v hnh ch nht,hnh val,v cc a gic. ho 2D tng cng v khi nim ca php t trt hnh hc bng cch cung cp mt c ch cho php rendering o ca bt k b mt hnh hc no.Tng t nh vy vi Java 2D API bn c th v cc dng ng vi bt k rng v dng hnh hc no. Dng hnh hc c cung cp thng qua cc phn thc thi implementations ca Shape interface trong Graphic class, nh hnh ch nht 2D v Elip 2D. Cc ng cong v hnh cung cng thuc phn implementations ca Shape. Cc kiu v v t cng c cung cp thng qua phn thc thi implementations ca giao tip Paint v Stroke interfaces, v d BasicStroke, GradientPaint, TexturePaint,v Color. AffineTransform nh ngha cc php bin i trong to 2 chiu, gm c php ly t l,php chuyn i to ,php quay v php xn ct. Khung nhn c nh ngha bi cc phng thc ging nhau ca lp Shape m chng c dng nh ngha cc khung nhn chung,v d nh Rectangle2D v GeneralPath. Thnh phn mu sc c cung cp bi cc phng thc ca lp Composite, v d AlphaComposite. Mt kiu Font ch th c nh ngha bi cc collection ca Glyphs. 1.2 Rendering Model Kiu t trt ha n gin khng c g thay i khi thm vo Java 2D APIs. t trt ha th phi thit lp cc thng s v ha v gi phng thc ca i tng Graphics. Trong Java 2D API, lp Graphics2D m rng lp Graphics h tr thm nhiu thuc tnh ha v cung cp thm cc phng thc cho qu trnh t trt.

http://tailieuhay.com

11

Lp trnh ha trn Java 2D v 3D The Java 2D API t ng cn chnh nhng sai khc trong cc thit b t trt v cung cp mt kiu t trt thng nht cho cc dng thit b khc nhau. Ti tng ng dng,qu trnh t trt l ging nhau cho d thit b cui l mn hnh hay my in. Vi Java 2 SDK, version 1.3 , Java 2D API cn h trp cho cc mi trng a mn hnh (multi-screen environments). 1.2.1 Coordinate Systems Java 2D API bao hm hai h ta : 1. Khng gian ngi s dng l h ta logic v c lp vi thit b. Cc ng dng thng s dng h ta ny,tt c cc dng hnh hc c t trt bng Java 2D u c xc nh trong h ta ny. 2. Khng gian thit b l h ta ph thuc thit b,ng vi tng loi thit b cui m c h to khc nhau. Bng ng dng my o mt ca s hin th c th m rng thm nhiu thit b hin th vy l to nn mi trng a mn hin th, h ta ca thit b ny c s dng lm h ta ca my o s c ly lm h ta cho tt c cc mn hi th cn li. H thng Java 2D s t ng thc hin nhng php chuyn i cn thit gia khng gian ngi s dng v khng gian thit b . Mc d h ta cho mn hnh rt khc i vi h ta cho my in nhng s khc bit ny trong sut i vi cc ng dng. 1.2.1.1 User Space H ta ny c ch ra trong hnh 1-1. x

(0,0)

http://tailieuhay.com

12

Lp trnh ha trn Java 2D v 3D

y Figure 1-1 User Space Coordinate System

Khng gian ngi s dng biu din mt cch tru tng ng nht cho cc h to ca tt c cc thit b c lin quan.Cn khng gian thit b cho mt thit b c th c th c cng gc ta v hng ca cc trc hoc l c th khng.Ngoi ra cc ta ca khng gian ngi s dng c th chuyn i mt cch t ng vo khng gian thit b ph hp mi khi mt i tng ha c t trt,thng th cc chng trnh driver ca cc thit b thc hin iu ny. 1.2.1.2 Device Space Java 2D API nh ngha 3 mc thng tin cu hnh h tr cho vic chuyn i t khng gian ngi s dng sang khng gian thit b. Thng tin ny c cha trong 3 lp : GraphicsEnvironment GraphicsDevice GraphicsConfiguration Hai trong s chng s biu din tt c cc thng tin cn thit cho vic xc nh thit bi t trt v cho vic chuyn i ta t khng gian ngi

http://tailieuhay.com

13

Lp trnh ha trn Java 2D v 3D s dng sang khng gian thit b. ng dng c th truy cp thng tin ny nhng khng nht thit phi thc hin bt k php chuyn i no gia hai h ta chuyn . Lp GraphicsEnvironment m t tp cc thit b m c chp nhn bi cc ng dng Java trong mt mi trng c th.Cc thit b s dng cho qu trnh t trt gm c mn hnh , m in v cc b m nh.Lp GraphicsEnvironment cng bao gm tp cc font ph hp trong mi trng . Lp GraphicsDevice m t thit b t trt nh mn hnh hoc my in.Mi cu hnh ph hp ca thit b c biu din bi lp GraphicsConfiguration. V d,mt thit b hin th SVGA c th thc hin trong mt s ch mu nh : 640x480x16 colors, 640x480x256 colors, and 800x600x256 colors. Mn hnh SVGA c biu din bi mt i tng GraphicsDevice v ng vi mi ch mu ca mn hnh SVGA s c biu din bi mt i tng GraphicsConfiguration.Mt i tng kiu GraphicsEnvironment c th bao gm 1 hay nhiu i tng GraphicsDevices. Ngc li ,mi i tng GraphicsDevice c th c 1 hay nhiu i tng kiu GraphicsConfigurations. 1.2.2 Transforms Java 2D API c mt ch chuyn ta thng nht. Tt c cc php chuyn ta ,bao gm cc php chuyn t khng gian ngi s dng n khng gian ca thit b,u c biu din bi i tng kiu AffineTransform .AffineTransform nh ngha cc lut cho nhng thao tc trn cc h ta bng cc ma trn(cc php bin i nh bng cc b lc). Cng c th thm i tng AffineTransform cho cc dng ha bng cc php xoay ,ly t l ,chuyn i hoc ct ta cho mt mt hnh hc

http://tailieuhay.com

14

Lp trnh ha trn Java 2D v 3D ,vn bn hay nh khi chng c t trt.Cc php bin i c thm vo ny s c ng dng cho cc i tng ha c t trt trong trng hp php bin i ny c thc hin khi chuyn t ta khng gian ngi s dng sang khng gian ca thit b. 1.2.3 Fonts Mt xu thng c hiu l tp cc k t tao thnh.Khi mt xu c v, hnh dng ca n s c xc nh bi font m chng ta chn.Tuy nhin, hnh dng m font s dng hin th ln mn hnh xu khng phi lc no cng ging vi hnh dng ca mi k t ring bit. v d s kt hp ca 2 hay nhiu k t thng c thay th bi mt hnh dng k hiu no c gi l ligature. Cc hnh dng m mt phng ch s dng biu din cc k t trong mt xu c gi l glyphs. Mt font c th biu din mt k t nh ch thng hoc ch hoa bng cch s dng nhiu glyphs, hoc biu din cc lin kt k t nh fi ch biu din bi 1 glyph. Trong Java 2D API, mt glyph ch n gin l mt dng (Shape) m c th oc thao tc v t trt mt cch ging nhau nh bt k vi cc dng khc Shape. Mt font c th c xem nh tp cc glyph. Mt font n c th c rt nhiu kiu khc nhau nh ki ch m ,va,nghing ,gtchtt c cc kiu ch ny trong mt font c cng thit k in v c th v nh chng l cc thnh vin trong cng mt gia nh. Hay ni cch khc ,mt nhm cc glyphs vi cc kiu ring bit to nn mt dng font,nhm cc dng font tao nn mt h font ,h cc font to nn mt tp font v tp ny c sn trong mt i tng GraphicsEnvironment c th no . Trong Java 2D API, cc font c xc nh bi mt tn m m t mt dng font ring bit no ,v d Helvetica Bold. Nhng iu ny li khc vi fn mm JDK 1.1 ,cc font c m t bng cc tn lgc m nh x trn cc dng font khc nhau f thuc liu cc dng font c sn trong

http://tailieuhay.com

15

Lp trnh ha trn Java 2D v 3D mi trng ang xt khng.Nh tng thch cho iu ; the Java 2D API h tr vic xc nh cc font bng tn lgc cng nh bng tn dng font. S dng Java 2D API, c th son tho v t rt cc xu bao gm nhiu font thuc cc h font,hnh dng,kich thc, v thm ch c ngn ng khc nhau. Cc dng ca vn bn c lu ring bit mt cch lgc vi s sp xp cc vn bn.Cc i tng Font c s dng m t cc hnh dng hin th ca font, v thng tin sp xp c lu trong i tng TextLayout v TextAttributeSet . Vic lu gi cc font v thng tin sp xp ring bit nhau lm d dng hn cho vic s dng cng font ch nhng khc v cu hnh sp xp. 1.2.4 Images nh c to nn t tp cc pixel . Mt im nh hay mt pixel s nh ngha th hin ca mt nh ti vng quan st ca mn hnh . Mt mng hai chiu ca im nh c gi l mt raster. Th hin ca mt im nh c th c nh ngha mt cch trc tip hoc nh l mt ch s trong bng mu dnh cho nh. Trong nh mu a mu (hn 256 mu) cc im nh thng trc tip biu din lun mu sc v cc c trng khc cho mi vng hin th ca nh. Nhng nh nh vy s c kch thc ln hn nh mu m hin th bng ch s(indexed-color images), nhng chng nhn s tht hn . Trong nh mu hin th bng ch s (indexed-color image), nhng mu sc ca nh s b gii hn bi bng mu , v thng s lng mu trong bng mu s t hn sovi nh tht. Tuy nhin cc nh khi c lu nh tp cc ch s mu s lm cho kch thc nh nh i.nh dng ny thng c dng cho nhng nh c 256 mu. nh trong Java 2D API c hai thnh phn chnh D liu nh th(cc im nh)

http://tailieuhay.com

16

Lp trnh ha trn Java 2D v 3D Nhng thng tin cn thit cho qu trnh chuyn i cc im nh Cc lut cho vic chuyn i cc im nh c lu bi i tng ColorModel. i vi mt im nh hin th cn phi i km vi mt kiu mu sc. Mt di mu l mt thnh phn ca khng gian mu sc dnh cho nh.V d cc thnh phn mu l cc da mu trong nh RGB . Mt im nh trong nh dng mu trc tip c th c hiu nh mt tp . Gi java.awt.image bao gm mt s phng thc ColorModel cho cc biu din thnh phn im nh. Mt i tng ColorSpace cha cc lut sao cho tp cc gi tr mu tng ng vi mt mu sc nht nh .Cc phng thc ca ColorSpace trong java.awt.color s biu din cc khng gian mu sc thng dng, gm c khng gian mu RGB v gray scale. Lu rng mt khng gian mu khng phi l mt tp cc mu sc m tp ny nh ngh cc lut c th chuyn i cc gi tr mu thnh cc mu tng ng thng dch. Vic chia khng gian mu sc thnh cc ch mu s to nn s linh hot hn trong vic biu din v chuyn i t php biu din mu ny sang mt php biu din mu khc. 1.2.5 Fills and Strokes Vi Java 2D API, c th t cc hnh bng cch s dng cc kiu but khc nhau v cc kiu t khc nhau. V cc ch xt cho cng cng c biu din bng tp cc glyph, nn cc xu k t cng c th c v v t. Cc kiu bt c nh ngha bng cc i tng kiu Stroke.C th xc nh rng cng nh cc nt cho cc ng thng v ng cong. Cc kiu t c nh ngha bi cc phng thc thuc i tng Paint. Lp Color c sn trong cc phin bn trc ca AWT y l mt

http://tailieuhay.com

17

Lp trnh ha trn Java 2D v 3D dng n gin ca i tng Paint c s dng nh ngha t mu trn (solid color). Java 2D API cung cp thm hai phng thc mi cho Paint l TexturePaint v GradientPaint. TexturePaint nh ngha kiu t dng mu nh n gin(simple image fragment ) m c lp nh nhau. GradientPaint nh ngha mt kiu t mu loang(gradient) gia hai mu. Trong Java 2D, rendering mt ng nt ca mt hnh v t hnh bng mt kiu no c thc hin hai thao tc ring bit: S dng mt trong cc thut ton draw render cc ng nt ca hnh s dng cc kiu bt c xc nh bi cc thuc tnh ca Stroke v kiu t c xc nh bi thuc tnh Paint. S dng phng thc fill t cc vng trong ca hnh vi kiu t dc xc nh. Khi mt chui k t c render,cc thuc tnh hin ti ca Paint c p dng cho cc glyphs to nn chui .Lu thc cht i tng drawString s t cc glyphs m c render. v cc nt ca cc glyphs trong chui k t cn phi chn cc ng nt v render chng nh i vi cc hnh s dng phng thc draw . 1.2.6 Composites Khi render mt i tng m chng ln mt i tng tn tai trc cn phi xc nh lm th no kt hp mu ca cc i tung. Java 2D API c cc lut cho vic kt hp mu trong trng hp ny trong i tng Composite. Tuy nhin c mt s vn trong cch tip cn ny: S tht kh trong trng hp nu mu Red v mu Blue c thm vo hy khng c thm vo. Vic kt hp lgc s khng c h tr trong trng hp ccmu thuc cc khng gian mu khc nhau.

http://tailieuhay.com

18

Lp trnh ha trn Java 2D v 3D S kt hp s khng c ngha trong trng hp mu c biu din bng cc gia tr mu th khi s kt hp hai im nh l s kt hp ca hai gi tr mu. Java 2D API trnh cc loi ny bng cch thc hin cc lut pha trn alpha m s a vo cc thng tin v kiu biu din im nh mi khi thc hin kt hp mu. Mt i tng AlphaComposite bao gm cc kiu v mu sc ca cc mu sc ca ngun v ch.

Backward Compatibility and Platform independence Nh ni,Java 2D API c s tng thch i vi phn mm JDK 1.1 . V Java 2D API l mt kin trc chnh v vy m cc ng dng ca n c tnh c lp v mi trng 1.3.1 Backward Compatibility tng thch vi cc tnh nng tn ti trong ha JDK .Java 2D API tng cng thm mt s tnh nng cho AWT bng cch thm cc phng thc mi vo cc lp tn ti,m rng thm cc lp tn ti v ng thi thm cc lp mi v cc interface mi m khng nh hng ti cc API hp l. V d,C rt nhiu tnh nng caJava 2D API c bt ngun t vic m rng cc thuc tnh v ha trong Graphics2D. cung cp cc thuc tnh m rng v ha trong bao gm c yu t tng thch vi cc phn mm ha khc, Graphics2D m rng cc lp Graphics trong JDK1.1. paint paintAll update print

http://tailieuhay.com

19

Lp trnh ha trn Java 2D v 3D printAll getGraphics JDK 1.1 applet thng dch ng cnh ha m c a vo nh l mt th hin ca lp Graphics. c th truy nhp nhng chc nng c thc thi trong i tng Graphics2D, th mt applet tng thch vi Java 2D API s a ng cnh ha ti i tng Graphics2D:

public void Paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; ... ... g2.setTransform (t); }

Trong mt vi trng hp , hay ng hn l m rng mt lp tha k, Java 2D API khi quat ha n. C hai k thut c s dng khi quat ha cc lp k tha: Mt hay nhiu lp cha c chn vo biu phn cp ca lp , v cc lp tha k c cp nht m rng cc lp cha mi. K thut ny c s dng thm cc phng thc v cc d liu th hin cho lp k tha. Mt hay nhiu trin khai cc interface c thm vo lp k tha . K thut ny c s dng thm cc phng thc o tng qut(general abstract methods) cho lp k tha . V d, Java 2D API khi qut ha lp AWT Rectangle bng cch s dng c hai k thut S phn cp cho hnh ch nht ging nh:

http://tailieuhay.com

20

Lp trnh ha trn Java 2D v 3D

Trong phn mm JDK 1.1 , Rectangle l mt i tung m rng n gin. By gi m rng cc lp Rectangle2D mi v trin khai c hai interface Shape v Serializable. Hai lp cha c thm vo phn cp ca lp Rectangle l RectangularShape v Rectangle2D. Cc Applet c vit cho phn mm JDK 1.1 khng truy cp c cc lp mi v cc phn trin khai ca cc interface,nhng iu ny khng nh hng bi v lp Rectangle vn bao gm cc phng thc v cc thnh phn c trong cc phin bn trc. 1.3.2 Platform independence C kh nng php trin cc ng dng c lp vi mi trng. Java 2D API khng m ng v khng gian mu sc hay l ch mu ca thit b rendering v Java 2D API c bt k nh dng nh c th no. V ch c lp v font khi cc font c xy dng sn(c cung cp nh l mt phn ca phn mm JDK ),hay l khi chng c gi to bng lp trnh. Java 2D API khng h tr cc font xy dng sn v cc font c to nn nh chng trnh to font nhng n li h tr vic nh ngha cc font thng qua tp cc glyph ca n. Mi glyph li c th c nh ngha bi Shape m bao gm cc on ng thng v cc ng cong. C rt nhiu kiu font vi nhiu hnh dang v kich thc c bt ngun t tp cc glyph n l. 1.4 The Java 2D API Packages Cc lp Java 2D API c t chc trong cc package sau:

http://tailieuhay.com

21

Lp trnh ha trn Java 2D v 3D java.awt java.awt.geom java.awt.font java.awt.color java.awt.image java.awt.image.renderable java.awt.print Package java.awt bao gm cc lp Java 2D API cp trn v cc interface tn ti trc v cc interface ft trin thm. (R dng l khng phi tt c cc lp trong java.awt l cc lp ca Java 2D )

Package java.awt.geom bao gm cc classe v interface c lin quan n vic nh ngha cc dng hnh hc nguyn thy:

http://tailieuhay.com

22

Lp trnh ha trn Java 2D v 3D C nhiu dng hnh hc nguyn thy ng vi implementation. Float v Double iu ny cho php cc implementation c th hai mc chnh xc l gi tr single v double. Gi java.awt.font cha cc lp v cc giao din c s dng cho vic b tr vn bn v nh ngha cc kiu font: cc phn

Gi java.awt.color cha cc lp v cc giao din cho vic nh ngha cc khng gian mu v cc mu mu:

Cc gi java.awt.image v java.awt.image.renderable cha cc lp v cc giao din cho vic nh ngha v to bng ca nh.

http://tailieuhay.com

23

Lp trnh ha trn Java 2D v 3D

Package java.awt.image tn ti trong cc version trc ca AWT. Java 2D API tng cng thm cc lp nh k tha t AWT sau y: ColorModel DirectColorModel indexColorModel Cc lp ch mu sc ny vn tn ti trong package java.awt.image package cho s tng thch . m bo tnh thng nht,cc lp cho ch mu mi cng c trong package java.awt.image . Package java.awt.print bao gm cc lp v cc interface cho php in tt c cc dng vn bn , ha v nh da trn cng ngh Java 2D.

http://tailieuhay.com

24

Lp trnh ha trn Java 2D v 3D

Chng 2: Rendering with Graphics2D

Graphics2D m rng java.awt.Graphics to ra iu khin tinh vi hn v biu din cc hnh ,vn bn v nh .Qu trnh t trt Java 2D c iu khin thng qua i tng Graphics2D v cc thuc tnh trng thi ca n. Cc thuc tnh tng thi Graphics2D , nh l cc kiu ng thng v cc php bin i,c p dng cho cc i tng ha khi chng c t trt. Tp cc thuc tnh trng thi kt hp vi Graphics2D c tham chiu ti nh l Graphics2DContext. t trt vn bn ,hnh v nh,cn thit lp Graphics2D context v sau gi mt trong cc phng thc t trt Graphics2D nh draw hay fill.

http://tailieuhay.com

25

Lp trnh ha trn Java 2D v 3D 2.1 Cc lp v giao din. Bng cho sau y s lit k cc giao din v lp trong vic kt hp vi ng cnh Graphics2D context,bao gm cc lp biu din cc thuc tnh trng thi. Hu ht cc lp ny l mt phn ca package java.awt. Cc giao din v m t chng: Giao din Composite M t nh ngha cc phng thc cho vic kt hp mt i tng v gc vi cng ha c nh du. CompositeContex t c thc thi bi phng thc AlphaComposite. nh ngha mt mi trng ti u v c lp cho vic thc hin cc php kt hp .Vic thc hin cc lut kt hp ty chn c thc hin bit ngi lp Paint trnh. M rng: Transparency nh ngha cc mu sc cho vic t hoc v. c thc thi bi i tng PaintContext Color,Gradient-Paint v TexturePaint. nh ngha mt mi trng ti u v c lp cho vic v.Cc thao tc v c ty chn bi ngi lp Stroke trnh. To ra mt i tng Shape m cc ng vin ca n oc to bng.c thc thi bi phng thc BasicStroke. Cc lp v m t s lc v chng: Lp AffineTransform (java.awt.geom) M t Miu t mt php bin i 2D affine ,m thc hin vic nh x tuyn tnh t ta 2D ny n ta 2D khc.http://tailieuhay.com 26

Lp trnh ha trn Java 2D v 3D AlphaComposite Thc thi : Composite Thc hin cc lut kt hp cc gi tr alpha c bn cho BasicStroke cc i tng Shape,Text v Image. Thc thi :Stroke nh ngha kiu bt v( pen style) c p dng cho cc ng bao ca i tng Shape. Color Thc thi: Paint nh ngha mt kiu t mu ng nht cho i tng GradientPaint Shape. Thc thi: Paint nh ngha mt mu t mu loang tuyn tnh cho i tng Shape.Mu ny s thay i t mu C1 (ti im Graphics2D P1) ti mu C2(tai im P2). M rng: Graphics Lp c s cho qu trnh to bng trong khng gian TexturePaint 2D.M rng lp gc java.awt.Graphics Thc thi: Paint nh ngha mt kiu t theo mu cho i tng Shape.Mu t c to ra tu i tng BufferedImage.

2.2

Rendering Concepts t trt mt i tng ha s dng Java 2D API, cn thit lp

ng cnh Graphics2DContext v s dng mt trong cc phng thc t trt Graphics2D i vi i tng. C th thay i cc thuc tnh trng thi m to nn ng cnh Graphics2D nh : Thay i rng ca nt bt Thay i cho cc nt bt kt hp vi nhau nh th no.

http://tailieuhay.com

27

Lp trnh ha trn Java 2D v 3D Thit lp mt khung ct gii hn vng c t trt. Chuyn i ta ,xoay,ly t l hoc ct c i tng khi chng c render. nh ngha cc mu v cc kiu t cc hnh. Xc nh cc i tng a ha(multiple graphics objects) cn phi c to ra nh th no. Graphics2D nh ngha mt s phng thc thm v thay i cc thuc tnh trong ng cnh ha . Hu ht nhng phng thc ny l nhng i tng biu din cc thuc tnh ring bit nh i tng Paint hay Stroke . Ng cnh Graphics2D ct gi cc tham chiu ti cc i tng thuc tnh . Nu bin i mt i tng thuc tnh m l mt phn ca ng cnh Graphics2D ,th cn phi gi phng thc thit lp ph hp khai bo ng cnh.Thay i mt i tng trong qu trnh thao tc render s gy nn mt s biu hin bt thng thng v khng n nh . 2.2.1 Rendering Process Khi mt i tng ha c render, thng tin v hnh hc ,nh v thuc tnh c kt hp tnh ton nhng gi tr im nh cn phi thay i trn mn hin th. Qu trnh render cho mt i tng Shape c th c chia thnh 4 bc : 1. Nu i tng Shape c ta nt ,i tng Stroke quy vo ng cnh Graphics2D c s dng to nn mt i tng Shape mi bao quanh nhng ng nt . 2. Ta ca ng thuc i tng Shape c bin i t khng gian ngi s dng sang khng gian ca thit b theo cc thuc tnh bin i trong ng cng ha Graphics2D .

http://tailieuhay.com

28

Lp trnh ha trn Java 2D v 3D 3. ng (path)ca i tng Shape c ct b bng cch s dng cc thuc tnh ct trong ng cnh Graphics2D. 4. Phn cn li ca i tng Shape c t bng cch s dng thuc tnh ca i tng Paint v Composite thuc tnh trong ng cnh ca i tng Graphics2D. To bng (Rendering) vn bn tng ng vi vic to bng cc i tng thuc kiu Shape, khi vn bn c to bng vi tng glyph v mi glyph l mt i tng thuc kiu Shape. Ch c iu khc l Java 2D API phi xc nh i tng Font no s dng cho vn bn v ly kiu glyph tng ng t i tng Font trc khi to bng. i vi nh th c s khc bit , s chuyn i v thc hin cc php ct b vi hp xc nh bin nh( images bounding box). Thng tin v mu sc ly t chnh nh v ngun alpha(alpha channel) c s dng kt hp vi thuc tnh hin ti ca Composite khi cc im nh c hp trn b mt to bng. 2.2.2 Controlling Rendering Quality Java 2D API a ra cc la chn cho php ngi s dng to bng nhanh hay to bng vi cht lng cao. Nhng tham chiu ca ngi su dng c xc nh nh l cc ch dn thng qua thuc tnh ca i tng RenderingHints trong ng cnh ca i tng Graphics2D . Khng phi tt c cc mi trng u h tr vic thay i ch to bng v vy xc nh cc ch dn cho qu trnh to bng s khng c m bo chng s c s dng hay khng . Lp RenderingHints h tr c kiu ch dn sau y: Alpha interpolation - c th thit lp ty chn default, quality, speed. Antialiasing - c th thit lp ty chn default :on hoc off.

http://tailieuhay.com

29

Lp trnh ha trn Java 2D v 3D Color Rendering - c th thit lp ty chn default, quality, hoc speed. Dithering - c th thit lp ty chn default:disable, enable. Fractional Metrics - c th thit lp ty chn default, on, hoc off. Interpolation- c th thit lp ty chn nearest-neighbor, bilinear, hoc bicubic. Rendering - c th thit lp ty chn default, quality, hoc speed. Text antialiasing - c th thit lp ty chn default: on hoc off. thit lp hoc thay i cc thuc tnh RenderingHints trong ng cnh ca i tng Graphics2D th gi phng thc setRenderingHints. Khi mt ch dn c thit lp mc nh ,mi trng to bng mc nh s c s dng . K thut lm trn(Antialiasing) Khi cc thc th c s c to bng trn thit b hin th ,cc bin(cnh) ca chng c th khng trn hay nhm l do thuc tnh aliasing. Cc ng cung v ng cho c dng nhm bi v chng c xp x bi cc im nh m gn nht v hn dng vi chng . y l iu m chng ta c th nhn thy vi cc thit b trc y vi cc cnh nhm xut hin tri ngc hon ton vi cc cnh trn ca gn nm ngang hay thng ng. Antialiasing l mt k thut c s dng to bng cc i tng vi cc cnh trn hn. Thay v s dng cc im nh gn ging vi cc ng cho v ng cong ,tng mt cc im nh bao quanh ti cc vng c to bng. iu ny lm cho cch cnh trn hn v tri rng s chuyn tip bt/tt vi cc pixel a im(multi pixel) . Tuy nhin k thut antialiasing i hi nhiu v ti nguyn my tnh v lm tng thi gian to bng.

http://tailieuhay.com

30

Lp trnh ha trn Java 2D v 3D

2.2.3 Stroke Attributes To nt mt i tng thuc kiu Shape nh i tng GeneralPath tng nng vi vic s dng mt bt lgc theo cc on ca i tng GeneralPath. Thuc tnh ca Graphics2DStroke nh ngha cc tnh cht ca nt bt v. i tng BasicStroke c s dng nh ngha cc thuc tnh ng nt cho mt ng cnh ca Graphics2D. BasicStroke inh ngha cc thuc tnh nh rng cu nt v ,mu t thit lp hay thay i cc thuc tnh Stroke trong ng cnh ca Graphics2D th gi phng thc setStroke. Nh v du,nh u tin trong hnh 2-3 s dng miter join-style,v hnh th hai s dng kiu round join-style, a round endcap style, and a dashing pattern.

http://tailieuhay.com

31

Lp trnh ha trn Java 2D v 3D Cc phng thc to bng Graphics2D c s dng thuc tnh ca Stroke v nh drawArc, drawLine, drawOval, drawPolygon, drawPolyline, drawRect, v drawRoundRect.Khi mt trong cc phng thc c gi th cc ng nt ca i tng Shape xc nh s c to bng. Thuc tnh Stroke nh ngha cc tnh cht ca ng thng v cc thuc tnh ca Paint nh ngha mu sc hay mu ca nt bt. V d phng thc draw(myRectangle) c gi: 1. Thuc tnh ca Stroke s quy nh cho ng nt ca hnh ch nht . 2. Cc ng nt ny s c bin i thnh mt i tng kiu Shape . 3. i tng Paint is c p dngcc im nh thuc min gii hn bi ng bao ca i tng Shape. Qu trnh x l ny c minh ho trong hnh 2-4:

2.2.4 Fill Attributes Thuc tnh t mu trong ng cnh Graphics2D c biu din bi i tng Paint. C th thm mt i tng vo ng cnh ca i tng Graphics2D (Graphics2D context) bng cch gi phng thc setPaint. Khi mt i tng Shape hay l cc glyph c v (bi cc phng thc Graphics2D.draw, Graphics2D.drawString),http://tailieuhay.com 32

Lp trnh ha trn Java 2D v 3D i tng Paint ny s c p dng ti tt c cc pixel nm trong i tng Shape m biu din cc ng nt bao quanh i tng . Khi mt i tng Shape c t mu (Graphics2D.fill), i tng Paint c p dng ti tt c cc im nh nm trong ng bao ca i tng Shape. Cc kiu t mu ng nht n gin (solid color) c khi to bi phng thc setColor.Color l phn trin khai (implementation) n gin nht ca giao tip Paint (Paint interface). t cc hnh vi cc kiu t phc tp hn nh l t loang(gradient) v t dt ( texture) bng cch s dng cc lp trong Java 2D Paint l GradientPaint v TexturePaint. Cc lp ny s loi b cc cng vic tiu tn thi gian to cc kiu t phc tp bng cch s dng cc kiu t mu ng nht n gin .

Khi gi phong thc fill to bng mt i tng Shape,th h thng s: 1. Xc nh cc im nh no th hin i tng . 2. Xc nh mu cho mi im nh t i tng Paint. 3. Chuyn cc mu ny ti gi tr im nh tng ng cho cc thit b hin th. 4. Ghi cc im nh ra thit b hin th .

http://tailieuhay.com

33

Lp trnh ha trn Java 2D v 3D Qu trnh x l theo phin t chc hp l qu trnh x l cc im nh , Java 2D API t chc chng theo tng phin. Mi phin c th l tp cc im nh k nhau trn mt ng qut hay l mt khi (block)cc im nh. Qu trnh x l theo phin c thc hin theo 2 bc: 1. Phng thc createContext ca i tng paint c gi to mt i tng PaintContext. i tng PaintContext ny s lu thng tin ng cnh v thao tc to bng hin thi v nhng thng tin cn thit to ra cc mu. Phng thc createContext method is passed the bounding boxes of thegraphics object being filled in user space and in device space,i tng ColorModel l ni to cc mu sc,v thc hin qu trnh chuyn i nh x t khng gian ngi s dng vo khng gian ca thit b. i tng ColorModel xem nh mt ch dn khng phi tt c cc i tng Paint c th h tr mt i tng ColorModel bt k. 2. Phng thc getColorModel c gi nhn gi tr ca i tng ColorModel cho mu v t i tng PaintContext. Phng thc getRaster sau c gi lp li nhiu ln nhn gi tr ca i tng Raster m bao gm d liu mu tht cho mi phin. Thng tin ny passed to the next stage in the rendering pipeline, m v cc mu c to bng cch s dng i tng Composite hin thi . 2.2.5 Clipping Paths Mt khung nhn s xc nh phn ca i tng Shape hay Image cn c to bng . Khi mt khung nhn l mt phn ca ng cnh ca i tng Graphics2D, th ch nhng phn ca i tng Shape hay image nm trong khung nhn mi c to bng.

http://tailieuhay.com

34

Lp trnh ha trn Java 2D v 3D thm khung nhn cho ng cnh ca Graphics2D th go phng thc setClip. Bt k i tng Shape cng c th c s dng nh ngha mt khung nhn. thnh i khung nhn cn phi s dng phng thc setClip xc nh mt khung nhn mi hay l gi phng thc clip thay i khung nhn cho phn giao nhau gia khung nhn c v mt i tng Shape. 2.2.6 Transformations Ng cnh ca i tng Graphics2D bao gm mt php bin i m c s dng bin i nhng i tng t khng gian ngi s dng vo khng gian thit b trong qu trnh to bng. thc hin cc php bin i khc nh php quay hay ly t l th cn phi thm cc php bin i khc vo ng cnh ca i tng.Cc php bin i c thm vo ny s tr thnh mt phn ca ng bin i (pipeline of transformations) m c pdng trong sut qua trnh to bng. Graphics2D cung cp mt vi cch khc thay i php bin i trong ng cnh ca i tng Graphics2D . Cch n gin nht l gi mt trong cc phng thc bin i trong i tng Graphics2D nh : rotate, scale, shear, hay translate. Xc nh cc tnh cht ca php bin i p dng trong sut qa trnh to bng v Graphics2D t ng to ra cc thay i ph hp. Cng c th ni mt php bin i AffineTransform vi php bin i Graphics2D hin ti. Php bin i AffineTransform thc hin cc php bin i cho ng nh php dch,t l ,quay v ct b vi tp cc hnh c bn. Khi mt php bin i c ni vo php bin i tn ti trc th php bin i sau cng s c xc nh nh l php bin i c

http://tailieuhay.com

35

Lp trnh ha trn Java 2D v 3D thc hin u tin. tip ni mt php bin i vi php bin i hin ti , you pass an AffineTransform to Graphics2D.transform. Lp Graphics2D cng bao gm phng thc setTransform , nhng phng thc ny khng bao gi c s dng ni vi cc php bin i ta khc ca php bin i ang tn ti. Phng thc setTransform s ghi ln php bin i hin thi ca i tng Graphics2D, nhng phng thc ny cn cho mt s mc ch khc nh: p dng php bin i t l iu chnh cho my in. V mt i tng JComponent parents origin Phng to mt thnh phn d dng quan st. Cc tnh hung khc m ngi cung cp i tng Graphics2D mun chuyn i cho qu trnh to bng hiu qu . Phng thc setTransform method c xem nh thit lp i tng Graphics2D tr lai php bin i ban u sau qu trnh to bng ha ,vn bn v nh c chuyn i: non-zero translation from its

AffineTransform

aT

=

g2d.getTransform();

g2d.transform(...); g2d.draw(...); g2d.setTransform(aT);

Graphics2D cng cung cp mt phin bn v drawimage m trong i tng AffineTransform c xem nh mt tham s . iu ny cho php p dng mt php bin i cho i tng nh khi n c v m khng cn chnh sa ng ng cu php bin i. nh ny c c v nh khi kt ni

http://tailieuhay.com

36

Lp trnh ha trn Java 2D v 3D php bin it ny vi php bin it hin ti trong ng cnh ca Graphics2D Cc php bin i quan h(Affine Transforms) Java 2D API cung cp mt lp bin i l AffineTransform. AffineTransforms c s dng bin i vn bn ,hnh v cc nh khi chng c to bng. Cng c th ng dng cc php bin i cho i tng Font to ra cc dn xut font mi(new font derivations). Mt php bin i ng nht (affine transformation) thc hin mt php bin i tuyn tnh trn tp ho c bn. N lun bin cc ng thng thnh cc ng thng v cc ng thng song song thnh cc ng thng song song,tuy nhin khong cch gia cc im v cc gc ca cc ng thng khng song song c th thay i. Cc php bin i c th kt hp to ra ng ng cc php bin i mt cch hiu qu nhm p dng cho mt i tng no . S kt hp ny xem nh l s mc ni. Khi mt php bin i c kt ni vi mt php bin i ang tn ti nh vi AffineTransform.concatenate, th php bin i cui cng c xc nh l php bin i u tin c p dng . Mt php bin i cng c th c mc ni trc vi mt php bin i ang tn ti . Trong trng hp ny th php bin i cui cng s c thc hin cui cng . Php mc ni trc c c p dng thc hin cc php bin i c lin quan vi khng gian thit b thay v khng gian ngi s dng. V d c th s dng phng thc AffineTransform.preConcatenate thc hin php chuyn i c lin quan ti khng gian cc im nh.. 2.2.6.1 Constructing an AffineTransform

http://tailieuhay.com

37

Lp trnh ha trn Java 2D v 3D AffineTransform cung cp mt tp cc phng thc cho vic xy dng cc i tng AffineTransform. getTranslateinstance getRotateinstance getScaleinstance getShearinstance s dng cc phng thc ny cn phi xc nh cc tnh cht ca php bin i m cn to ra v lp AffineTransform s to ra cc ma trn chuyn i ph hp. Cng c th xy dng php bin i ng nht mt cch trc tip m khng cn thng qua lp AffineTransform bng cch xc nh cc thnh phn ca php bin i . 2.2.7 Composite Attributes Khi hai i tng ha trng ln nhau th iu cn thit l phi xc nh nhng mu no s c to bng cho cc im nh chng ln nhau. V d nu mt hnh ch nht mu v mt hnh ch nht mu xanh chng ln nhau th cc im nh s c mu hoc mu xanh hay l s kt hp ca c hai mu. Mu ca nhng im nh trong vng chng nhau s xc nh hnh ch nht no nm trn v b che khut nh th no. Qu trnh x l xc nh mu no to bng cho cc im nh s c chia s cho cc i tng chng (overlaping objects)c gi compositing. C hai interface to cc kiu kt hp c bn trong Java 2D l : Composite v CompositeContext. xc nh cc kiu kt hp s c s dng th cn phi thm vo mt i tng AlphaComposite Graphics2D bng cch gi cho ng cnh ca i tng phng thc setComposite.

AlphaComposite,v mt trin khai(implementation) ca interface Composite , c h tr mt s kiu kt hp khc nhau . Mi i tng ca

http://tailieuhay.com

38

Lp trnh ha trn Java 2D v 3D lp ny l mt lut kt hp m t s pha trn mt mu mi vi mu ang tn ti.. Mt trong nhng lut kt hp trong lp AlphaComposite l SRC_OVER, lut ny ch ra mu mi (mu ngun) s c pha trn vi mu ang tn ti (mu ch ) nh th no.

2.2.7.1 Managing Transparency Gi tr alpha ca mt mu l gi tr o trong sut ca mu ,n ch ra (theo phn trm) bao nhiu phn trm mu trc khi t c hin th ra khi cc mu chng ln nhau. Cc mu ti (co gi tri alpha=1.0) th cc mu t ln chng s khng c hin th, trong khi cc mu trong sut (c gi tr alpha=0.0) cho php cc mu t ln n c hin th. Khi vn bn v hnh c to bng th gi tr alpha s bt ngun t thuc tnh ca i tng Paint trong ng cnh ca i tng Graphics2D . Khi cc hnh v vn bn c lm trn th gi tr alpha t thuc tnh Paint (trong ng cnh ca Graphics2D) c kt hp vi thng tin v cc im nh b che t rasterized path. Cc nh lu thng tin v gi tr alpha ca chnh n . Khi to mt i tng AlphaComposite , c th xc nh c gi tr alpha c thm vo . Khi thm i tng AlphaComposite ny ti nghttp://tailieuhay.com 39

Lp trnh ha trn Java 2D v 3D cnh ca Graphics2D ,gi tr alpha thm vo ny s lm tng gi tr trong sut ca bt k i tng ha no khi chng c to bng - gi tr alpha ca mi i tng ha c nhn ln bi gi tr alpha ca i tng AlphaComposite. 2.2.7.2 Transparency and images Cc nh c th lu thng tin v trong sut cho mi im nh ca n. Thng tin ny oc gi l knh alpha( alpha channel,) ,n c s dng kts hp vi i tng Composite trong ng cnh ca Graphics2D pha trn mu ca nh cc ha ang tn ti.

2.3

Thit lp Graphics2Context cu hnh ng cnh Graphics2D cho qu trnh to bng phi s

dng cc phng thc khi to cho i tng Graphics2D xc nh cc thuc tnh nh RenderingHints, Stroke, Paint,Clipping path, Composite, and Transform. 2.3.1 Setting Rendering Hints i tng RenderingHints ng gi tt cc tham chiu xc nh mt i tng s c to bng nh th no . to cc ch dn cho quhttp://tailieuhay.com 40

Lp trnh ha trn Java 2D v 3D trnh to bng trong ng cnh Graphics2D ,th cn to mt i tng RenderingHints v chuyn n vo lp Graphics2D.setRendering To ch dn cho qu trnh to bng s khng m bo vic s s dng mt thut ton to bng c th: khng phi mi trng cng h tr ch to bng . Trong v d cho sau y th cho php s dng k thut lm trn (antialiasing) v to ra cc tham chiu xc nh cht lng cho qu trnh to bng:

qualityHints

=

new

RenderingHints(RenderingHints.KEY_ANTiALiAS iNG, RenderingHints.VALUE_ANTiALiAS_ON); qualityHints.put(RenderingHints.KEY_RENDERi NG, RenderingHints.VALUE_RENDER_QUALiTY); g2.setRenderingHints(qualityHints); 2.3.2 Specifying Stroke Attributes Mt i tng BasicStroke s nh ngha cc tnh cht uwoc p dng cho ng vin bao quanh mt i tng Shape, gm c rng v kiu ng (dashing pattern), lm th no cc on thng c kt hp vi nhau. khi to cc thuc tnh v ng nt trong ng cnh Graphics2D ,th khi to mt i tng BasicStroke v chuyn n vo phng thc setStroke 2.3.2.1 Setting the Stroke Width khi to rng ng nt th khi to i tng BasicStroke vi rng mong mun v sau gi phng thc setStrokehttp://tailieuhay.com 41

Lp trnh ha trn Java 2D v 3D Trong v d cho sau y , rng ng nt c khi to vi 12 im v gi tr mc nh c s dng cho vic b tr kiu jont v kiu endcap.

wideStroke

=

new

BasicStroke(12.0f);

g2.setStroke(wideStroke); 2.3.2.2 Specifying Join and Endcap Styles khi to cho cc kiu join v endcap ,cn to mt i tng BasicStroke vi cc thuc tnh mong mun . Trong v d cho sau y, rng ng nt c khi to vi 12 im v cc kiu join v endcap c s dng thay cho cc gia tri mc nh:

roundStroke

=

new

BasicStroke(4.0f,

BasicStroke.CAP_ROUND, BasicStroke.JOiN_ROUND); g2.setStroke(roundStroke); 2.3.2.3 Setting the Dashing Pattern Cc kiu ng phc tp c th d dng c nh ngha vi mt i tng BasicStroke. Khi to mt i tng BasicStroke ,phi xc nh 2 tham s kim sot kiu ng: dash - l mt mng biu din kiu ng. Cc phn t xen k ca mng biu din kch thc nt gch v khong cch gia cc nt gch . Phn t 0 biu din nt gch u tin, phn t th 1 biu din khong trng u tin.

http://tailieuhay.com

42

Lp trnh ha trn Java 2D v 3D dash_phase - l mt offset nh ngha ni bt u ca mu nt gch. Trong v d sau y, hai mu nt gch c p dng cho mt ng thng. Trong mu th nht ,kch thc ca cc nt gch v khong trng gia chng l khng thay i. Mu th hai th phc tp hn ,s dng mng su phn t nh ngha

fot la

dash1[] bs

= =

{00} 1.f; new BasicStroke(5.0f,

BasicStroke

BasicStroke.CAP_BUTT, BasicStroke.JOiN_MiTER, 00) .f; g2.setStroke(bs); Line2D 10.0f, ln ie 100.0f, = new Line2D.Float(20.0f, 10.0f, dash1,

10.0f);

g2.draw(line); fot] la[ 4. , 0f bs dash2 2. , 0f = = {.f 60, 4.0 f, 2 f, .0

40} .f; new BasicStroke(5.0f,

BasicStroke.CAP_BUTT, BasicStroke.JOiN_MiTER, 00) .f; g2.setStroke(bs); g2.draw(line) C hai mu u s dng offset(a ch bt u ca hai mu) 0 khi cc nt gch u tin s v tr u ca mu. Hai mu ny c minh ha trong hnh2-7http://tailieuhay.com 43

10.0f,

dash2,

Lp trnh ha trn Java 2D v 3D

2.3.3 Specifying Fill Attributes Thuc tnh cu i tng Paint trong ng cnh Graphics2D xc nh cc mu t hay cc mu (kiu )t khi mt i tng vn bn v Shape c to bng. 2.3.3.1 Filling a Shape with a Gradient Lp GradientPaint cung cp mt cch n gin t mt hnh bng kiu t loang . Khi khi to i tng GradientPaint, cn xc nh v tr u tin cng vi mu t v v tr cui cng mt mu t. Kiu t ny s thay i t l t mu ny sang mu khc dc theo ng ni ca hai v tr chn, minh ha trong hnh 2-8.

Trong ngi sao th ba,c hai im u nm trong cng mt hnh.Tt c cc im dc theo ng t loang m rng qua im P1 s nhn c mu ban u v cc im dc theo ng t loang c m rng ngoi im P2 s nhn mu kt thc. Cc bc cn thc hin t loang theo hai mu: 1. Khi to i tng GradientPaint . 2. Gi phng thc Graphics2D.setPaint. 3. Khi to i tng Shape.

http://tailieuhay.com

44

Lp trnh ha trn Java 2D v 3D

Trong v d sau y, mt hnh ch nht c t vi mu dt n gin t mt i tng buffered image.

GradientPaint GradientPaint(50.0f, 50.0f, 250.0f,

gp 50.0f,

= Color.blue

new

Color.green);

g2.setPaint(gp); g2 ill ct( , .f Re 50 50, 200, 200);

2.3.3.2 Filling a Shape with a Texture Lp TexturePaint cung cp mt cch n gin t hnh bng mu lp. Khi to mt i tng Bufferedimage s dng nh l mt mu t. Cn chuyn hm khi to mt hnh ch nht nh ngha tn s lp cho mu ,c chi ra trong hnh 2-9. t hnh theo mu dt: 1. To i tng TexturePaint 2. Gi phng thc Graphics2D.setPaint. 3. To i tng Shape. 4. Gi phng thc Graphics2D.fill(shape). Trong v d sau y, mt hnh ch nht c t vi mu dt n gin t mt i tng bufferedimage. // of Create size a buffered bi = = new image texture patch 5,

//5x5 Bufferedimage(5,

Bufferedimage Graphics2D big

Bufferedimage.TYPE_iNT_RGB); bi.createGraphics(); big.setColor(Color.green);http://tailieuhay.com 45

Lp trnh ha trn Java 2D v 3D big.fillRect(0,0,5,5); big.setColor(Color.lightGray); big.fillOval(0,0,5,5); // Create image r = tp new = Rectangle(0,0,5,5); new paint a to the graphics filled a texture paint from the buffered Rectangle

TexturePaint // // with } Add the

TexturePaint(bi,r,TexturePaint.NEAREST_NEiGHBOR); texture and context. g2.setPaint(tp); Create the render rectangle texture. g2.fillRect(0,0,200,200);

2.3.4 Setting the Clipping Path nh ngha mt khung nhn:1. Khi to mt i tng Shape m biu din vng mun to

bng.2. Gi phng thc Graphics2D.setClip s dng i tung

shape nh l mt khung nhn cho ng cnh Graphics2D . thu hp khung nhn:1. Khi to i tng Shape m giao vi khung hnn hin ti. 2. Gi phng thc clip thay i khung nhn cho phn giao

nhau ca khung nhn hin ti v i tng Shape mi. Trong v d cho sau y, mt khung nhn c to ra t mt elip v sau c thay i bng cch gi phng thc clip.

public

void

paint(Graphics

g)

{

http://tailieuhay.com

46

Lp trnh ha trn Java 2D v 3D Graphics2D g2 = (Graphics2D) g;

// it n it n // the

The w h

width = =

and

height

of

the

canvas

getSize().width; getSize().height; an elpe lis path e = new and use i t as

Create clipping

Ellipse2D

Ellipse2D.Float(w/4.0f,h/4.0f, w/2.0f,h/2.0f); g2.setClip(e);

//

Fl il

the the

canvas. ci lp

Only i s

the

area

within

rendered

g2.setColor(Color.cyan); g2 ill ct( 0,w ); .f Re 0, ,h

// i t //

Change to the the

the

clipping

path, of and

setting

intersection current ci lp

a

new

rectangle. Rectangle r = new

Rectangle(w/4+10,h/4+10,w/2-20,h/2-20); g.lpr; 2ci()

//

Fl il the

the new

canvas. ci lp

Only

the

area

within // i s

rendered

http://tailieuhay.com

47

Lp trnh ha trn Java 2D v 3D g2.setColor(Color.magenta); g2 ill ct( 0,w ); .f Re 0, ,h

2.3.5 Setting the Graphics2D Transform bin i i tng Shape,xu vn bn, hay nh cn phi thm vo mt php bin i mi AffineTransform cho ng ng php bin i tronh ng cnh ca Graphics2D trc khi to bng . php bin i c p dng khi i tng ha c to bng . V d v mt hnh ch nht nghing 45 :1. Ly mt php bin i Graphics2D trc khi thc hin bt

k php bin i no . Lun gi phng thc getTransform trong i tng Graphics2D trc khi thm vo mt php bin i cho ng cnh ha bi v ng cnh ha c th tn ti mt php bin i cho mt l do khc ,nh v Swing v cc thnh phn trong mt ca s.2. Ly

php

quay

bng

cch

gi

AffineTransform.

getRotateinstance.3. Gi phng thc Graphics2D.transform thm vo cc

php bin i mi cho ng ng bin i. Khng c s dng phng thc setTransform thm mt php bin i ta mi,bi v setTransform s ghi ln php bin i hin ti trong ng cnh ha1. 4.To i tng Rectangle2D.Float . 4. Gi phn thc Graphics2D.draw to bng hnh ch

nht.5. Sau khi to bng cho hnh ch nht c bin i , th

reset php bin i ca Graphics2D tr v php bin i ban

http://tailieuhay.com

48

Lp trnh ha trn Java 2D v 3D u m lu trong bc 1 bng cch gi phng thc setTransform cho php bin i ban u . Trong v d sau y, mt th hin ca AffineTransform c s dng quay hnh ch nht i 45 khi n c to bng.

AffineTransform Rectangle2D

aT

= rect

g2.getTransform(); = new

Rectangle2D.Float(1.0,1.0,2.0,3.0); AffineTransform rotate45 =

AffineTransform.getRotateinstance(Math.Pi /4.0,0.0,0.0) g2.transform(rotate45); g2.draw(rect); g2.setTransform(aT);

Cn trong v d ny,mt i tng AffineTransform c s dng quay cc cu text xung quang mt im trung tm.

//

Define

the

rendering at

transform = new

AffineTransform AffineTransform(); // make // Apply room a for

translation the t t ex .

transform

to

rotated

http://tailieuhay.com

49

Lp trnh ha trn Java 2D v 3D at.setToTranslation(400.0, g2.transform(at); // Create the a text / of angles i < 4; i++) 00) .f; { 20; .) the string rotation transform to 400.0);

rotate

at.setToRotation(Math.Pi // Render at four 90 i copies degree = 0;

a a Jv for

(n it

g2.drawString(Java, g2.transform(at); }

0.0f ,

C th bin i nh trong cch tng t -php bin i trong ng cnh Graphics2D c p dng trong qu trnh to bng m khng cn quan tm n kiu i tng ho ang c to bng p dng php bin i cho nh m khng cn thay i php bin i trong ng cnh Graphics2D , th chuyn AffineTransform sang drawimage:

AffineTransform

rotate45

=

AffineTransform.getRotateinstance(Math.Pi /4.0,0.0,0.0) g2.drawimage(myimage, rotate45);

Cc php bin i cng c p dng cho i tng Font to ra mt kiu.http://tailieuhay.com 50

Lp trnh ha trn Java 2D v 3D 2.3.6 Specifying a Composition Style Mt i tng AlphaComposite cha cc lut kt hp xc nh cc mu s c to bng nh th no khi i tng nu ln i tng khc . xc nh cc kiu kt hp cho ng cnh Graphics2D , cn to mt i tng AlphaComposite v chuyn n vo phng thc setComposite. Kiu thng dng nht l SRC_OVER. 2.3.6.1 Using the Source Over Compositing Rule Lut kt hp SRC_OVER s kt hp cc im nh ngun (source pixel) vi cc im nh ch (destination pixel). V d ,nu to bng mt hnh ch nht mu xanh nc bin (blue) v sau to bng mt hnh ch nht mu m ln mt phn ca hnh ch nht kia,th vng giao nhau s c mu . Hay ni cch khc ,i tng m c to bng cui cng s xut hin trn cng . s dng lut kt hp SRC_OVER : 1. To mt i tng AlphaComposite bng cch gi phng thc getinstance v xc nh lut SRC_OVER . AlphaComposite ER); 2. Gi phng thc setComposite thm i tung AlphaComposite cho ng cnh ca Graphics2D. g2.setComposite(ac); Mi khi i tng kt hp ny c thit lp ,th i tng ln c to bng bng cch s dng lut kt hp xc nh. 2.3.6.2 Increasing the Transparency of Composited Objects ac =AlphaComposite.getinstance(AlphaComposite.SRC_OV

http://tailieuhay.com

51

Lp trnh ha trn Java 2D v 3D AlphaComposite cho php xc nh mt gi tr hng s alpha thm vo m c nhn vi gi tr alpha ca cc im nh ngun tng trong sut. V d , khi to mt i tng AlphaComposite m to bng i tng ngun c trong sut l 50% ,xc nh mt gi tr alpha l .5:

AlphaComposite ER, .5f);

ac

=AlphaComposite.getinstance(AlphaComposite.SRC_OV

Trong v d cho sau y, a source over alpha composite object is created with an alpha of .5 and added to the graphics context, causing subsequent shapes to be rendered 50% transparent.

public

void g2

paint(Graphics = (Graphics2D)

g) g;

{

Graphics2D

g2.setColor(Color.red);

g2.translate(100,50); // radians=degree * pie / 180

g2.rotate((45*java.lang.Math.Pi)/180); g2.fillRect(0,0,100,100); g2.setTransform(new set // to identity a new ac alpha = composite AffineTransform()); //

Create

AlphaComposite

http://tailieuhay.com

52

Lp trnh ha trn Java 2D v 3D AlphaComposite.getinstance(AlphaComposite.SR C_OVER,0.5f); g2.setComposite(ac); g2.setColor(Color.green); g2.fillRect(50,0,100,100); g2.setColor(Color.blue); g2.fillRect(125,75,100,100); g2.setColor(Color.yellow); g2.fillRect(50,125,100,100); g2.setColor(Color.pink); g2.fillRect(-25,75,100,100); }

2.4

Rendering Graphics Primitives Graphics2D cung cp cc phng thc to bng cho cc c s

ha nh Shapes, Text, v images: drawto nt cho ng vin ca i tng Shape bng cch s dng cc i tng Stroke v Paint trong ng cnh Graphics2D . fillt mt i tng Shape bng cch s dng i tng Paint trong ng cnh Graphics2D . drawStringto bng cc xu vn bn dc xc nh bng cch s dng i tng Paint trong ng cnh Graphics2D . drawimageto bng cc nh c xc nh 2.4.1 Drawing a Shape ng bin ca bt k i tng Shape cng c to bng bng phng thc Graphics2D.draw.

http://tailieuhay.com

53

Lp trnh ha trn Java 2D v 3D Phng thc v t cc phin bn trc cng c h tr : drawLine, drawRect, drawRoundRect, drawOval, drawArc,drawPolyline, drawPolygon, draw3DRect. Khi mt i tng Shape c v , th ng bin ca n s c to nt bng i tng Stroke trong ng cnh Graphics2D Bng vic thit lp i tng BasicStroke ph hp trong ng cnh Graphics2D ,th c th v ng thng vi rng v mu nt gch bt k . i tng BasicStroke cng nh ngha cc thuc tnh endcap v join ca ng thng . to bng cho cc ng bin ca i tng shape: 1. Khi to cho i tng BasicStroke 2. Gi phng thc Graphics2D.setStroke 3. Khi to cho i tng Shape. 4. Gi phng thc Graphics2D.draw(shape). Trong v d sau,i tng GeneralPath c s dng nh ngha mt ngi sao v mt i tng BasicStroke c thm vo ng cnh Graphics2D nh ngha cho cc cnh ca ngi sao vi cc thuc tnh join .

public

void g2

paint(Graphics = (Graphics2D)

g) g;

{

Graphics2D

//

create

and

set

the

stroke

g2.setStroke(new // Create a

BasicStroke(4.0f)); star using a general path

object

http://tailieuhay.com

54

Lp trnh ha trn Java 2D v 3D GeneralPath p = new

GeneralPath(GeneralPath.NON_ZERO); p.moveTo(p.lineTo(+ p.lineTo(p.lineTo(+ p.lineTo(+ 100.0f, 100.0f, 50.0f, 0. 0f, 50.0f, + + 25.0f); 25.0f); 100.0f); 100.0f); 100.0f);

p.closePath();

//

translate

origin

towards

center

of

canvas g2.translate(100.0f,

100.0f);

//

render

the

sa' trs

path

g2.draw(p); }

2.4.2 Filling a Shape Phng thc Graphics2D.fill c th c s dng t bt k i tng Shape. Khi mt i tng Shape c t, th phn b gii hn bi ng bao ca i tng s c to bng vi ng cnh Graphics2D ca thuc tnh Paint attributenh Color, TexturePaint, or GradientPaint. Phng thc t t cc phin bn trc ca phn mm JDK cng c h tr: fillRect, fill3DRect, fillRoundRect, fillOval, fillArc, fillPolygon,clearRect. t mt i tng Shape: 1. Xc nh mu t v kiu t trong ng cnh ha bng cch s dng Graphics2D.setColor hay Graphics2D.setPaint.http://tailieuhay.com 55

Lp trnh ha trn Java 2D v 3D 1. Khi to i tng Shape. 2. Gi phng thc Graphics2D.fill to bng i tng Shape. Trong v d sau y ,phng thc setColor c gi nh ngha mu t l green fill cho mt i tng Rectangle2D.

public

void g2

paint(Graphics = (Graphics2D)

g) g;

{

Graphics2D

g2.setPaint(Color.green); Rectangle2D r2 = new

Rectangle2D.Float(25,25,150,150);

g.ilr) 2fl(2; } 2.4.3 Rendering Text to bng vn bn ,cn gi Graphics2D.drawString, sau chuyn vo xu m bn mun to bng 2.4.4 Rendering images to bng vn bn ,cn gi Graphics2D.drawimage, sau chuyn vo xu m bn mun to bng . 2.5 Defining Custom Composition Rules C th to mt kiu mi hon ton ca php kt hp bng cch thc thi cc interface Composite v CompositeContext . Mt i tng Composite cung cp mt i tng CompositeContext m thc cht l lu trng thi v thc hin cng vic kt hp. Nhiu i tnghttp://tailieuhay.com 56

Lp trnh ha trn Java 2D v 3D CompositeContext c th c to t mt i tng Composite lu cc trng thi ring bit trong mi trng a lung (multithreaded environment.) 2.6 Rendering in a Multi-Screen Environment TrongJavaTM 2 SDK, version 1.3, Java 2DTM API h tr nhng cu hnh a mn hin thi khc nhau m c th c cu hnh bi mt mi trng m : C hai hoc nhiu mn hnh c lp C hai hoc nhiu mn hnh ni ch c mt mn hnh chnh v cc mn hin th khc s copy nhng hnh nh xut hin trn mn hnh chnh Hai hoc nhiu mn hnh m c dng nh mt my o v n cho php gi cc thit b o. Java 2D API cho php to cc i tng Frame, JFrame, Window, hoc Jwindow .Vi mt i tng GraphicsConfiguration xc nh cc thit b hin th cho qu trnh to bng. Trong c ba cu hnh,mi thit b hin th c biu din bi mt i tng GraphicsDevice.Mt i tng GraphicsDevice c nhiu i tng GraphicsConfiguration kt hp vi n . Khi hai hoc nhiu mn hnh c s dng to mt thit b o ,h ta o (m tn ti c lp vi thit b hin th vt l )c s dng biu din thit b o . Cc bin cu mi i tng GraphicsConfiguration trong cu hnh a mn hin th c quan h vi h ta o . Mt mn hin th trong mi trng ny c xc nh nh l mn hin th chnh v t v tr (0, 0) ca h ta o . Da trn v tr ca mn hin th chnh ,thit b o c th c ta m ,nh trong hnh 210:

http://tailieuhay.com

57

Lp trnh ha trn Java 2D v 3D

xc nh nu l mi trng thit b o ni m mt i tng Window hay Frame c th xut hin trn hai hay nhiu mn hnh vt l ,th gi phng thc getBounds trn mi i tng GraphicsConfiguration trong h thng v kim tra nu gc ta khc v tr (0, 0). Phng thc getBounds ca i tng GraphicsConfiguration tr v mt i tng hnh Rectangle trong h ta o .V vy ,nu mt gc ta khng phi v tr (0, 0), th mi trng chnh l mi trng o. Trong mi trng thit b o ,cc ta ca cc i tng GraphicsConfiguration c quan h vi h ta o . V vy, phi s dng ta o khi gi phng thc setLocation ca i tng Frame hay Window. Cho v d,on m ny s ly ng bao ca mt i tng GraphicsConfiguration v s dng cc ng bao thit lp v tr ca i tng Frame ti ta (10, 10) trong h ta ca mn hin th vt l .

Frame g) c;

f

=

new

Frame(GraphicsConfiguration

Rectanglehttp://tailieuhay.com

bounds

=

gc.getBounds();58

Lp trnh ha trn Java 2D v 3D f.setLocation(10 bounds.y); + bounds.x, 10 +

Nu cc ng bao ca i tng GraphicsConfiguration khng c tnh n , th i tng Frame c hin th ti v tr (10, 10) trn m hnh vt l chnh , iu ny c th khc vi m hnh vt l ca i tng GraphicsConfiguration c xc nh . Phng thc getBounds c th c s dng xc nh cc ng bin cu thit b o. Gi phng thc getBounds trn mi i tng GraphicsConfiguration trong h thng . xc dnh cc ng bao cu thit b o , tnh ton s kt hp ca cc ng bao. K thut ny c s dng trong v d sau.

Rectangle Rectangle();

virtualBounds

=

new

GraphicsEnvironment

ge

=

GraphicsEnvironment.getLocalGraphicsEnviron ment(); GraphicsDevice[] ge.getScreenDevices(); for +) (n it { gd = g[] sj; gc = j = 0; j < gs.length; j+ gs =

GraphicsDevice

GraphicsConfiguration[] gd.getConfigurations();

http://tailieuhay.com

59

Lp trnh ha trn Java 2D v 3D for +) (n it { = i = 0; i < gc.length; i+

virtualBounds virtualBounds.union(gc[i].getBounds()); } }

Applet sau s to mt i tng JFrame vi mi i tng GraphicsConfiguration ca mi i tng GraphicsDevice trong i tng GraphicsEnvironment. Mi i tng JFrame hin th mt tp cc vch , xanh m ,xanh nht,s lng cc mn hin th s lng cc i tng GraphicsConfiguration v cc ng bao cu i tng GraphicsConfiguration. on m sau phi c chy vi JavaTM 2 SDK, version 1.3 hoc cao hn.

/* * Transform.java * 1.0 * 27/03/06 * Day la doan chuong trinh mieu ta cac phep bien doi. */ import java.awt.*; import javax.swing.*;

http://tailieuhay.com

60

Lp trnh ha trn Java 2D v 3D /* * Chuong trinh nay tao bong mot hinh duoc chon boi nguoi su dung.Voi cac phuong * thuc paint,stroke, va rendering cung duoc lua chon boi nguoi su dung. */ /** * @author Administrator * */ public class Transform extends JApplet implements itemListener, ActionListener { /** * */ private static final long serialVersionUiD = -2514519718222913151L; JLabel primLabel, lineLabel, paintLabel,

transLabel, strokeLabel; TransPanel display; static JComboBox primitive, line, paint,

trans, stroke; JButton redraw; public static boolean no2D = false;

http://tailieuhay.com

61

Lp trnh ha trn Java 2D v 3D

public void init() { GridBagLayout GridBagLayout(); getContentPane().setLayout(layOut); GridBagConstraints GridBagConstraints(); c.weightx = 1.0; c.fill = GridBagConstraints.BOTH; primLabel = new JLabel(); primLabel.setText("Hnh gc"); Font newFont = getFont().deriveFont(1); primLabel.setFont(newFont); c = new layOut = new

primLabel.setHorizontalAlignment(JLabel.CENTER); layOut.setConstraints(primLabel, c); getContentPane().add(primLabel); lineLabel = new JLabel(); lineLabel.setText("Cc ng"); lineLabel.setFont(newFont);

lineLabel.setHorizontalAlignment(JLabel.CENTER); layOut.setConstraints(lineLabel, c); getContentPane().add(lineLabel); paintLabel = new JLabel(); paintLabel.setText("Kiu v");http://tailieuhay.com 62

Lp trnh ha trn Java 2D v 3D paintLabel.setFont(newFont);

paintLabel.setHorizontalAlignment(JLabel.CENTER); layOut.setConstraints(paintLabel, c); getContentPane().add(paintLabel); c.gridwidth GridBagConstraints.RELATiVE; transLabel = new JLabel(); transLabel.setText("Cc php bin i"); transLabel.setFont(newFont); =

transLabel.setHorizontalAlignment(JLabel.CENTER); layOut.setConstraints(transLabel, c); getContentPane().add(transLabel); c.gridwidth GridBagConstraints.REMAiNDER; strokeLabel = new JLabel(); strokeLabel.setText("T trt"); strokeLabel.setFont(newFont); =

strokeLabel.setHorizontalAlignment(JLabel.CENTER) ; layOut.setConstraints(strokeLabel, c); getContentPane().add(strokeLabel);

http://tailieuhay.com

63

Lp trnh ha trn Java 2D v 3D GridBagConstraints GridBagConstraints(); ls.weightx = 1.0; ls.fill = GridBagConstraints.BOTH; primitive = new JComboBox(new Object[] { "Hnh ch nht", "Hnh elip", "Vn bn" }); primitive.additemListener(this); newFont = newFont.deriveFont(0, 14.0f); primitive.setFont(newFont); layOut.setConstraints(primitive, ls); getContentPane().add(primitive); line = new JComboBox(new Object[] ls = new

{ "Mnh", "m", "Nt t" }); line.additemListener(this); line.setFont(newFont); layOut.setConstraints(line, ls); getContentPane().add(line); paint = new JComboBox(new Object[]

{ "ng nht", "T loang", "polka" }); paint.additemListener(this); paint.setFont(newFont); layOut.setConstraints(paint, ls); getContentPane().add(paint); ls.gridwidth GridBagConstraints.RELATiVE; =

http://tailieuhay.com

64

Lp trnh ha trn Java 2D v 3D trans = new JComboBox(new Object[]

{ "identity", "Quay", "T l", "shear" }); trans.additemListener(this); trans.setFont(newFont); layOut.setConstraints(trans, ls); getContentPane().add(trans); ls.gridwidth GridBagConstraints.REMAiNDER; stroke = new JComboBox(new Object[] { "ng nt", "T y", "ng nt va T y" }); stroke.additemListener(this); stroke.setFont(newFont); layOut.setConstraints(stroke, ls); getContentPane().add(stroke); GridBagConstraints GridBagConstraints(); button.gridwidth GridBagConstraints.REMAiNDER; redraw = new JButton("V li"); redraw.addActionListener(this); redraw.setFont(newFont); layOut.setConstraints(redraw, button); getContentPane().add(redraw); GridBagConstraints GridBagConstraints(); tP = new = button = new =

http://tailieuhay.com

65

Lp trnh ha trn Java 2D v 3D tP.fill = GridBagConstraints.BOTH; tP.weightx = 1.0; tP.weighty = 1.0; tP.gridwidth GridBagConstraints.REMAiNDER; display = new TransPanel(); layOut.setConstraints(display, tP); display.setBackground(Color.white); getContentPane().add(display); validate(); } public void itemStateChanged(itemEvent e) { } public void actionPerformed(ActionEvent e) { display.setTrans(trans.getSelectedindex()); display.renderShape(); } @SuppressWarnings("deprecation") public static void main(String[] argv) { if (argv.length > 0 && argv[0].equals("no2d")) { Transform.no2D = true; } =

http://tailieuhay.com

66

Lp trnh ha trn Java 2D v 3D JFrame chuyn i"); frame.addWindowListener(new WindowAdapter() { public windowClosing(WindowEvent e) { System.exit(0); } }); JApplet applet = new Transform(); void frame = new JFrame("Cc php

frame.getContentPane().add(BorderLayout.CENTER, applet); applet.init(); frame.setSize(550, 400); frame.show(); } } @SuppressWarnings("serial") class TransPanel extends JPanel { AffineTransform at = new AffineTransform(); int w, h;

http://tailieuhay.com

67

Lp trnh ha trn Java 2D v 3D

Shape shapes[] = new Shape[3]; Bufferedimage bi; boolean firstTime = true; public TransPanel() { setBackground(Color.white); shapes[0] 100); shapes[1] 0.0, 100.0, 100.0); TextLayout 1, AffineTransform AffineTransform(); textAt.translate(0, textTl.getBounds().getHeight()); shapes[2] = textTl.getOutline(textAt); } public void setTrans(int transindex) { switch (transindex) { case 0: at.setToidentity(); at.translate(w / 2, h / 2); break; (float) textTl 76), textAt = = new new new TextLayout("Brother Hood", new Font("Tomaha", FontRenderContext(null, false, false)); = new Ellipse2D.Double(0.0, = new Rectangle(0, 0, 100,

http://tailieuhay.com

68

Lp trnh ha trn J