Lập trình đồ họa trên Java 2D và 3D

Sự phát triển của khoa học, kĩ thuật, nghệ thuật, kinh doanh, và công nghệ luôn luôn phụ thuộc vào khả năng truyền đạt thông tin của chúng ta, hoặc thông qua các bit dữ liệu lưu trữ trong microchip hoặc thông qua giao tiếp bằng tiếng nói. Câu châm ngôn từ xa xưa “một hình ảnh có giá trị hơn cả vạn lời" hay "trăm nghe không bằng một thấy" cho thấy ý nghĩa rất lớn của hình ảnh trong việc chuyển tải thông tin. Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là trong trường hợp bất đồng về ngôn ngữ.

doc577 trang | Chia sẻ: lylyngoc | Lượt xem: 2361 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Lập trình đồ họa trên Java 2D và 3D, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lời nói đầu Sự phát triển của khoa học, kĩ thuật, nghệ thuật, kinh doanh, và công nghệ luôn luôn phụ thuộc vào khả năng truyền đạt thông tin của chúng ta, hoặc thông qua các bit dữ liệu lưu trữ trong microchip hoặc thông qua giao tiếp bằng tiếng nói. Câu châm ngôn từ xa xưa “một hình ảnh có giá trị hơn cả vạn lời" hay "trăm nghe không bằng một thấy" cho thấy ý nghĩa rất lớn của hình ảnh trong việc chuyển tải thông tin. Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là trong trường hợp bất đồng về ngôn ngữ. Do đó không có gì ngạc nhiên khi mà ngay từ khi xuất hiện máy tính, các nhà nghiên cứu đã cố gắng sử dụng nó để phát sinh các ảnh trên màn hình. Trong suốt gần 50 năm phát triển của máy tính, khả năng phát sinh hình ảnh bằng máy tính của chúng ta đã đạt tới mức mà bây giờ hầu như tất cả các máy tính đều có khả năng đồ họa.Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh nhất của tin học. Ngay từ khi xuất hiện, đồ họa máy tính đã có sức lôi cuốn mãnh liệt, cuốn hút rất nhiều người ở nhiều lĩnh vực khác nhau như khoa học, nghệ thuật, kinh doanh, quản lí, ... Tính hấp dẫn và đa dạng của đồ họa máy tính có thể được minh họa rất trực quan thông qua việc khảo sát các ứng dụng của nó. Ngày nay, đồ họa máy tính được sử dụng trong rất nhiều lĩnh vực khác nhau như công nghiệp, thương mại, quản lí, giáo dục, giải trí, … Số lượng các chương trình đồ họa ứng dụng thật khổng lồ và phát triển liên tục.Trong lĩnh vực công nghiệp,CAD(computer-aided design) đã được sử dụng hầu hết trong việc thiết kế các cao ốc, ô tô, máy bay, tàu thủy, tàu vũ trụ, máy tính,…Trong lĩnh vực giải trí,nghệ thuật, đồ họa máy tính giúp ta tạo ra các chương trình trò chơi,các kĩ xảo điện ảnh cho các nhà làm phim,hay ngay chính giao diện đồ họa đã làm nâng cao khả năng giao tiếp giữa người và máy tính. Để có thể làm được những ứng dụng đồ họa hữu ích cho cuộc sống,trước hết chúng ta cần phải có một nền tảng vững chắc về lập trình đồ họa.Có rất nhiều ngôn ngữ hỗ trợ lập trình đồ họa máy tính,mỗi ngôn ngữ được xây dưng trên những thư viện đồ họa riêng,có những thế mạnh riêng.Và khi nói về lập trình đồ họa,chúng ta không thể không nói đến ngôn ngữ Java,một ngôn ngữ rất mạnh trong lĩnh vực này.Với mục đích nghiên cứu,tìm hiểu và mang đến cho những ai muốn tìm hiều về lập trình đồ họa một tài liệu thiết thực,nhóm chúng em đã chọn đề tài làm tutorial về lập trình đồ họa trên nền tảng ngôn ngữ lâp trình Java,dựa trên các tài liệu training trên mạng của hãng Sun.Vì là lần đầu làm tài liệu tham khảo nên chúng em không tránh khỏi sai sót.Chúng em mong thầy xem xét và góp ý cho tài liệu này.Chúng em chân thành cảm ơn. Phần 1 Lập trình đồ họa với Java 2D Chương 1 Tổng quan về Java 2D API Java 2D™ API tăng cường về khả năng đồ hoạ, văn bản và ảnh của Abstract Windowing Toolkit (AWT), giúp phát triển về giao diện người sủ dụng và ứng dụng về JAVA trong một số lĩnh vực mới.Cùng với khả năng mạnh về đồ hoạ ,phông chữ và ảnh trong các API, thì Java 2D API còn hỗ trợ những thuộc tính và thành phần màu sắc đã được nâng cao, và thành công trong việc biểu diễn các bề mặt hình học tuỳ ý và một kiểu tô trát chuẩn cho máy in và thiết bị hiển thị. Java 2D API cũng cho phép tạo ra các thư viện đồ hoạ mở rộng,như các thư viện của CAD-CAM và các thư viện tạo hiệu ứng đặc biệt cho ảnh và đồ hoạ, cũng như việc tạo ra các bộ lọc đọc/viết file ảnh và đồ hoạ.Khi được sử dụng kết hợp với Java Media Framework Java Media APIs khác ,thì Java 2D APIs có thể được sử dụng để tạo ra và hiển thị hiện thực ảo và các dạng đa phương tiện khác. Java Animation và Java Media Framework APIs dưa trên Java 2D API để hỗ trợ việc tô trát(rendering). 1.1 Enhanced Graphics, Text, and imaging Nếu các phiên bản trước của AWT chỉ cung cấp các gói tô trát(rendering) đơn giản chỉ phù hợp cho việc rendering các trang HTML đơn giản,mà không đáp ứng đủ cho các dạng đồ hoạ,văn bản và ảnh phức tạp. Thì Java 2D™ API cung cấp gói tô trát đẩy đủ các tính năng bằng cách mở rộng AWT để hỗ trợ cho đồ hoạ và các thao tác rendering. Ví dụ như thông qua các lớp đồ hoạ cho phép vẽ hình chữ nhật,hình ôval,và các đa giác. Đồ hoạ 2D tăng cường về khái niệm của phép tô trát hình học bằng cách cung cấp một cơ chế cho phép rendering ảo của bất kì bề mặt hình học nào.Tương tư như vậy với Java 2D API bạn có thể vẽ các dạng đường với bất kì độ rộng và dạng hình học nào. Dạng hình học được cung cấp thông qua các phần thực thi implementations của Shape interface trong Graphic class, như hình chữ nhật 2D và Elip 2D. Các đường cong và hình cung cũng thuộc phần implementations của Shape. Các kiểu vẽ và tô cũng được cung cấp thông qua phần thực thi implementations của giao tiếp Paint và Stroke interfaces, ví dụ BasicStroke, GradientPaint, TexturePaint,và Color. AffineTransform định nghĩa các phép biến đổi trong toạ độ 2 chiều, gồm có phép lấy tỉ lệ,phép chuyển đổi toạ độ ,phép quay và phép xén cắt. Khung nhìn được định nghĩa bởi các phương thức giống nhau của lớp Shape mà chúng được dùng để định nghĩa các khung nhìn chung,ví dụ như Rectangle2D và GeneralPath. Thành phần màu sắc được cung cấp bởi các phương thức của lớp Composite, ví dụ AlphaComposite. Một kiểu Font chữ thì được định nghĩa bởi các collection của Glyphs. 1.2 Rendering Model Kiểu tô trát đồ họa đơn giản không có gì thay đổi khi thêm vào Java 2D™ APIs. Để tô trát đồ họa thì phải thiết lập các thông số về đồ họa và gọi phương thức của đối tượng Graphics. Trong Java 2D API, lớp Graphics2D mở rộng lớp Graphics để hỗ trợ thêm nhiều thuộc tính đồ họa và cung cấp thêm các phương thức cho quá trình tô trát. The Java 2D API tự động cân chỉnh những sai khác trong các thiết bị tô trát và cung cấp một kiểu tô trát thống nhất cho các dạng thiết bị khác nhau. Tại tầng ứng dụng,quá trình tô trát là giống nhau cho dù thiết bị cuối đó là màn hình hay máy in. Với Java 2 SDK, version 1.3 , Java 2D API còn hỗ trợp cho các môi trường đa màn hình (multi-screen environments). 1.2.1 Coordinate Systems Java 2D API bao hàm hai hệ tọa độ: Không gian người sủ dụng là hệ tọa độ logic và độc lập với thiết bị. Các ứng dụng thường sủ dụng hệ tọa độ này,tất cả các dạng hình học được tô trát bằng Java 2D đều được xác định trong hệ tọa độ này. Không gian thiết bị là hệ tọa độ phụ thuộc thiết bị,ứng với từng loại thiết bị cuối mà có hệ tạo độ khác nhau. Bằng ứng dụng máy ảo một cửa sổ hiển thị có thể mở rộng thêm nhiều thiết bị hiển thị vậy lý tạo nên môi trường đa màn hiển thị, hệ tọa độ của thiết bị này được sủ dụng làm hệ tọa độ của máy ảo sẽ được lấy làm hệ tọa độ cho tất cả các màn hiể thị còn lại. Hệ thống Java 2D sẽ tự động thực hiện những phép chuyển đổi cần thiết giữa không gian người sử dụng và không gian thiết bị . Mặc dù hệ tọa độ cho màn hình rất khác đối với hệ tọa độ cho máy in nhưng sự khác biệt này trong suốt đối với các ứng dụng. 1.2.1.1 User Space Hệ tọa độ này được chỉ ra trong hình 1-1. (0,0) x y Figure 1-1 User Space Coordinate System Không gian người sử dụng biểu diễn một cách trừu tượng đồng nhất cho các hệ tạo độ của tất cả các thiết bị có liên quan.Còn không gian thiết bị cho một thiết bị cụ thể có thể có cùng gốc tọa độ và hướng của các trục hoặc là có thể không.Ngoài ra các tọa độ của không gian người sử dụng có thể chuyển đổi một cách tự động vào không gian thiết bị phù hợp mỗi khi một đối tượng đồ họa được tô trát,thường thì các chương trình driver của các thiết bị thực hiện điều này. 1.2.1.2 Device Space Java 2D API định nghĩa 3 mức thông tin cấu hình để hỗ trợ cho việc chuyển đổi từ không gian người sử dụng sang không gian thiết bị. Thông tin này được chứa trong 3 lớp : • GraphicsEnvironment • GraphicsDevice • GraphicsConfiguration Hai trong số chúng sẽ biểu diễn tất cả các thông tin cần thiết cho việc xác định thiết bi tô trát và cho việc chuyển đổi tọa độ từ không gian người sử dụng sang không gian thiết bị. Ứng dụng có thể truy cập thông tin này nhưng không nhất thiết phải thực hiện bất kì phép chuyển đổi nào giũa hai hệ tọa độchuyển . Lớp GraphicsEnvironment mô tả tập các thiết bị mà đựợc chấp nhận bởi các ứng dụng Java trong một môi trường cụ thể.Các thiết bị sử dụng cho quá trình tô trát gồm có màn hình , má in và các bộ đệm ảnh.Lớp GraphicsEnvironment cũng bao gồm tập các font phù hợp trong môi trường đó. Lớp GraphicsDevice mô tả thiết bị tô trát như màn hình hoặc máy in.Mỗi cấu hình phù hợp của thiết bị được biểu diễn bởi lớp GraphicsConfiguration. Ví dụ,một thiết bị hiển thị SVGA có thể thực hiện trong một số chế độ màu như : 640x480x16 colors, 640x480x256 colors, and 800x600x256 colors. Màn hình SVGA được biểu diễn bởi một đối tượng GraphicsDevice và ứng với mỗi chế độ màu của màn hình SVGA sẽ được biểu diễn bởi một đối tượng GraphicsConfiguration.Một đối tượng kiểu GraphicsEnvironment có thể bao gồm 1 hay nhiều đối tượng GraphicsDevices. Ngược lại ,mỗi đối tượng GraphicsDevice có thể có 1 hay nhiều đối tượng kiểu GraphicsConfigurations. 1.2.2 Transforms Java 2D API có một chế độ chuyển tọa độ thống nhất. Tất cả các phép chuyển tọa độ,bao gồm các phép chuyển từ không gian người sử dụng đến không gian của thiết bị,đều được biểu diễn bởi đối tượng kiểu AffineTransform .AffineTransform định nghĩa các luật cho những thao tác trên các hệ tọa độ bằng các ma trận(các phép biến đổi ảnh bằng các bộ lọc). Cũng có thể thêm đối tượng AffineTransform cho các dạng đồ họa bằng các phép xoay ,lấy tỉ lệ ,chuyển đổi hoặc cắt tọa độ cho một mặt hình học ,văn bản hay ảnh khi chúng được tô trát.Các phép biến đổi được thêm vào này sẽ được ứng dụng cho các đối tượng đồ họa được tô trát trong trường hợp đó phép bién đổi này được thực hiện khi chuyển từ tọa độ không gian người sử dụng sang không gian của thiết bị. 1.2.3 Fonts Một xâu thường được hiểu là tập các kí tự tao thành.Khi một xâu được vẽ, hình dạng của nó sẽ được xác định bởi font mà chúng ta chọn.Tuy nhiên, hình dạng mà font sử dụng để hiển thị lên màn hình xâu đó không phải lúc nào cũng giống với hình dáng của mỗi kí tự riêng biệt. ví dụ sự kết hợp của 2 hay nhiều kí tự thường được thay thế bởi một hình dạng kí hiêu nào đó được gọi là ligature. Các hình dạng mà một phông chữ sử dụng để biểu diễn các kí tự trong một xâu được gọi là glyphs. Một font có thể biểu diễn một kí tự như chữ thường hoặc chữ hoa bằng cách sử dụng nhiều glyphs, hoặc biểu diễn các liên kết kí tự như fi chỉ biểu diễn bởi 1 glyph. Trong Java 2D API, một glyph chỉ đơn giản là một dạng (Shape) mà có thể đựoc thao tác và tô trát một cách giống nhau như bất kì với các dạng khác Shape. Một font có thể được xem như tập các glyph. Một font đơn có thể có rất nhiều kiểu khác nhau như kểi chữ đậm ,vừa,nghiêng ,gôtích…tất cả các kiểu chữ này trong một font có cùng thiết kế in và có thể ví như chúng là các thành viên trong cùng một gia đình. Hay nói cách khác ,một nhóm các glyphs với các kiểu riêng biệt tạo nên một dạng font,nhóm các dạng font tao nên môt họ font ,họ các font tạo nên một tập font và tập này có sẵn trong một đối tượng GraphicsEnvironment cụ thể nào đó. Trong Java 2D API, các font được xác định bởi một tên mà mô tả một dạng font riêng biệt nào đó,ví dụ Helvetica Bold. Nhưng điều này lại khác với fần mềm JDK 1.1 ,các font được mô tả bằng các tên lôgíc mà ánh xạ trên các dạng font khác nhau fụ thuộc liệu các dạng font đó có sắn trong môi trường đang xét không.Như để tương thích cho điều đó ; the Java 2D API hỗ trợ việc xác định các font bằng tên lôgíc cũng như bằng tên dạng font. Sử dụng Java 2D API, có thể soạn thảo và tô rát các xâu bao gồm nhiều font thuộc các họ font,hình dạng,kich thước, và thâm chí cả ngôn ngữ khác nhau. Các dạng của văn bản được lưu riêng biệt một cách lôgíc với sự sắp xếp các văn bản.Các đối tượng Font được sử dụng để mô tả các hình dạng hiển thị của font, và thông tin sắp xếp được lưu trong đối tượng TextLayout và TextAttributeSet . Việc lưu giứ các font và thông tin sắp xếp riêng biệt nhau làm dễ dàng hơn cho việc sử dụng cùng font chữ nhưng khác về cấu hình sắp xếp. 1.2.4 Images Ảnh được tạo nên từ tập các pixel . Một điểm ảnh hay một pixel sẽ định nghĩa thể hiện của một ảnh tại vùng quan sát của màn hình . Một mảng hai chiều của điểm ảnh được gọi là một raster. Thể hiện của một điểm ảnh có thể được định nghĩa một cách trực tiếp hoặc như là một chỉ số trong bảng màu dành cho ảnh. Trong ảnh màu đa màu (hơn 256 màu) các điểm ảnh thường trực tiếp biểu diễn luôn màu sắc và các đặc trưng khác cho mỗi vùng hiển thị của ảnh. Những ảnh như vậy sẽ có kích thước lớn hơn ảnh màu mà hiển thị bằng chỉ số(indexed-color images), nhưng chúng nhìn sẽ thật hơn . Trong ảnh màu hiển thị bằng chỉ số (indexed-color image), những màu sắc của ảnh sẽ bị giới hạn bởi bảng màu , và thường số lượng màu trong bảng màu sẽ ít hơn sovới ảnh thật. Tuy nhiên các ảnh khi được lưu như tập các chỉ số màu sẽ làm cho kích thước ảnh nhỏ đi.Định dạng này thường được dùng cho những ảnh có 256 màu. Ảnh trong Java 2D API có hai thành phần chính • Dữ liệu ảnh thô(các điểm ảnh) • Những thông tin cần thiết cho quá trình chuyển đổi các điểm ảnh Các luật cho việc chuyển đổi các điểm ảnh được lưu bởi đối tượng ColorModel. Đối với một điểm ảnh để hiển thị cần phải đi kèm với một kiểu màu sắc. Một dải màu là một thành phần của không gian màu sắc dành cho ảnh.Ví dụ các thành phần màu đỏ là các daỉ màu trong ảnh RGB . Một điểm ảnh trong ảnh dùng màu trực tiếp có thể được hiểu như một tập . Gói java.awt.image bao gồm một số phương thức ColorModel cho các biểu diễn thành phần điểm ảnh. Một đối tượng ColorSpace chứa các luật để sao cho tập các giá trị màu tương ứng với một màu sắc nhất định .Các phương thức của ColorSpace trong java.awt.color sẽ biẻu diễn các không gian màu sắc thông dụng, gồm có không gian màu RGB và gray scale. Lưu ý rằng một không gian màu không phải là một tập các màu sắc mà tập này định nghĩ các luật để có thể chuyển đổi các giá trị màu thành các màu tương ứng thông dịch. Việc chia không gian màu sắc thành các chế độ màu sẽ tạo nên sự linh hoạt hơn trong việc biểu diễn và chuyển đổi từ phép biểu diễn màu này sang một phếp biểu diẽn màu khác. 1.2.5 Fills and Strokes Với Java 2D API, có thể tô các hình băng cách sử dụng các kiểu but khác nhau và các kiểu tô khác nhau. Vì các chữ xét cho cùng cũng được biểu diễn bằng tập các glyph, nên các xâu kí tự cũng có thể được vẽ và tô. Các kiểu bút được định nghĩa băng các đối tượng kiểu Stroke.Có thể xác định độ rộng cũng như các nét cho các đường thẳng và đường cong. Các kiểu tô được định nghĩa bởi các phương thức thuộc đối tượng Paint. Lớp Color có sắn trong các phiên bản trước của AWT đây là một dạng đơn giản của đối tượng Paint được sử dụng để định nghĩa tô màu trơn (solid color). Java 2D API cung cấp thêm hai phương thức mới cho Paint là TexturePaint và GradientPaint. TexturePaint định nghĩa kiểu tô dùng mẩu ảnh đơn giản(simple image fragment ) mà được lặp như nhau. GradientPaint định nghĩa một kiểu tô màu loang(gradient) giữa hai màu. Trong Java 2D, rendering một đường nét của một hình và tô hình đó bằng một kiểu nào đó được thực hiên hai thao tác riêng biệt: • Sử dụng một trong các thuật toán draw để render các đường nét của hình sử dụng các kiểu bút được xác định bởi các thuộc tính của Stroke và kiểu tô được xác định bởi thuộc tính Paint. • Sử dụng phương thức fill để tô các vùng trong của hình với kiểu tô đã dược xác định. Khi một chuỗi kí tự được render,các thuộc tính hiện tại của Paint đựơc áp dụng cho các glyphs tạo nên chuỗi đó.Lưu ý thực chất đối tượng drawString sẽ tô các glyphs mà được render. Để vẽ các nét của các glyphs trong chuỗi kí tự cần phải chọn các đường nét và render chúng như đối với các hình sử dụng phương thức draw . 1.2.6 Composites Khi render một đối tượng mà chồng lên một đối tượng đã tồn tai trước đó cần phải xác định làm thế nào để kết hợp màu của các đối tuợng. Java 2D API có các luật cho việc kết hợp màu trong trường hợp này trong đối tượng Composite. Tuy nhiên có một số vấn đề trong cách tiếp cận này: • Sẽ thật khó trong trường hợp nếu màu Red và màu Blue được thêm vào hây không được thêm vào. • Việc kết hợp lôgíc sẽ không được hỗ trợ trong trường hợp cácmàu thuộc các không gian màu khác nhau. • Sự kết hợp sẽ không có ý nghĩa trong trường hợp màu được biểu diễn bằng các gia trị màu thì khi đó sự kết hợp hai điểm ảnh là sự kết hợp của hai giá trị màu. Java 2D API tránh các loĩi này bằng cách thực hiện các luật pha trộn alpha mà sẽ đưa vào các thông tin về kiểu biểu diễn điểm ảnh mỗi khi thực hiện kết hợp màu. Một đối tượng AlphaComposite bao gồm các kiểu về màu sắc của các màu sắc của nguồn và đích. Backward Compatibility and Platform independence Như đã nói,Java 2D™ API có sự tương thích đối với phần mềm JDK 1.1 . Và Java 2D™ API là một kiến trúc chính vì vậy mà các ứng dụng của nó có tính độc lập về môi trường 1.3.1 Backward Compatibility Để tương thích với các tính năng đã tồn tại trong đồ họa JDK .Java 2D API tăng cường thêm một số tính năng cho AWT bằng cách thêm các phương thức mới vào các lớp đã tồn tại,mở rộng thêm các lớp đã tồn tại và đồng thời thêm các lớp mới và các interface mới mà không ảnh hưởng tới các API hợp lệ. Ví dụ,Có rất nhiều tính năng củaJava 2D API được bắt nguồn từ việc mở rộng các thuộc tính về đồ họa trong Graphics2D. Để cung cấp các thuộc tính mở rộng về đồ họa trong đó bao gồm cả yếu tố tương thích với các phần mềm đồ họa khác, Graphics2D mở rộng các lớp Graphics trong JDK1.1. • paint • paintAll • update • print • printAll • getGraphics JDK 1.1 applet thông dịch ngữ cảnh đồ họa mà được đưa vào như là một thể hiện của lớp Graphics. Để có thể truy nhập những chức năng được thực thi trong đối tượng Graphics2D, thì một applet tương thích với Java 2D API sẽ đưa ngữ cảnh đồ họa tới đối tượng Graphics2D: public void Paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; ... ... g2.setTransform (t); } Trong môt vài trường hợp , hay đúng hơn là mở rộng một lớp thừa kế, Java 2D API khái quat hóa nó. Có hai kĩ thuật đã được sử dụng để khái quat hóa các lớp kế thừa: • Một hay nhiều lớp cha được chèn vào biểu đồ phân cấp của lớp , và các lớp thừa kế được cập nhật để mở rộng các lớp cha mới. Kĩ thuật này được sử dụng để thêm các phương thức và các dữ liệu thể hiện cho lớp kế thừa. • Một hay nhiều triển khai các interface được thêm vào lớp kế thừa . Kĩ thuật này được sử dụng để thêm các phương thức ảo tổng quát(general abstract methods) cho lớp kế thừa . Ví dụ, Java 2D API khái quát hóa lớp AWT Rectangle bằng cách sử dụng cả hai kĩ thuật Sự phân cấp cho hình chữ nhật giống như: Trong phần mềm JDK 1.1 , Rectangle là một đối tuợng mở rộng đơn giản. Bây giờ mở rộng các lớp Rectangle2D mới và triển khai cả hai interface Shape và Serializable. Hai lớp cha được thêm vào phân cấp của lớp Rectangle là RectangularShape và Rectangle2D. Các Applet được viết cho phần mềm JDK 1.1 không truy cập được các lớp mới và các phần triển khai của các interface,nhưng điều này không ảnh hưởng bởi vì lớp Rectangle vẫn bao gồm các phương thức và các thành phần có trong các phiên bản trước. 1.3.2 Platform independence Có khả năng pháp triển các ứng dụng độc lập với môi trường. Java 2D API không đảm đương về không gian màu sắc hay là chế độ màu của thiết bị rendering và Java 2D API có bất kì định dạng ảnh cụ thể nào. Và chỉ độc lập về font khi các font đó đã được xây dựng sẵn(được cung cấp như là một phần của phần mềm JDK ),hay là khi chúng được gởi tạo bằng lập trình. Java 2D API không hỗ trợ các font xây dựng sẵn và các font được tạo nên nhờ chương trình tạo font nhưng nó lại hỗ trợ việc định nghĩa các font thông qua tập các glyph của nó. Mỗi glyph lại có thể được định nghĩa bởi Shape mà bao gồm các đoạn đường thẳng và các đường cong. Có rất nhiều kiểu font với nhiều hình dang và kich thước được bắt nguồn từ tập các glyph đơn lẻ. 1.4 The Java 2D™ API Packages Các lớp Java 2D API được tổ chức trong các package sau: • java.awt • java.awt.geom • java.awt.font • java.awt.color • java.awt.image • java.awt.image.renderable • java.awt.print Package java.awt