อ่าน 2 นาที
จาวา 2 มิติ
Java 2D เป็น API สำหรับวาด ภาพกราฟิก สองมิติ โดยใช้ ภาษาการ เขียน โปรแกรม Java [ 1 ] การดำเนินการวาดภาพ Java 2D ทุกอย่างสามารถถือได้ว่าเป็นการ เติมรูปร่าง โดย ใช้สี และ รวม...
จาวา 2 มิติ
Java 2Dเป็นAPIสำหรับวาดภาพกราฟิกสองมิติ โดยใช้ ภาษาการ เขียนโปรแกรม Java [ 1 ] การดำเนินการวาดภาพ Java 2D ทุกอย่างสามารถถือได้ว่าเป็นการเติมรูปร่างโดยใช้สีและรวมผลลัพธ์ลงบนหน้าจอ Java 2D เป็นชุดคลาสสำหรับกราฟิกและการสร้างภาพสองมิติขั้นสูง ประกอบด้วยภาพลายเส้น ข้อความ และรูปภาพในโมเดลที่ครอบคลุมเพียงโมเดลเดียว API นี้ให้การสนับสนุนอย่างกว้างขวางสำหรับการรวมภาพและภาพที่มีช่องอัลฟา ชุดคลาสสำหรับการกำหนดและการแปลงพื้นที่สีที่แม่นยำ และชุดตัวดำเนินการสร้างภาพที่เน้นการแสดงผลที่หลากหลาย
องค์กร
Java 2D API และเอกสารประกอบสามารถดาวน์โหลดได้เป็นส่วนหนึ่งของ JDK 6 โดยคลาสของ Java 2D API จะถูกจัดระเบียบเป็นแพ็กเกจต่างๆ ดังต่อไปนี้ใน JDK 6:
java.awtแพ็กเกจหลักสำหรับ Java Abstract Window Toolkitjava.awt.geomไลบรารีมาตรฐานของ Java สำหรับรูปทรงเรขาคณิตสองมิติ เช่น เส้นตรง วงรี และสี่เหลี่ยมjava.awt.fontไลบรารีสำหรับจัดการสัญลักษณ์อักขระในภาษา Javajava.awt.colorห้องสมุดที่รวบรวมข้อมูลเกี่ยวกับวิธีการต่างๆ ที่สามารถใช้ในการแสดงสีได้java.awt.imageไลบรารีสำหรับจัดการภาพกราฟิกjava.awt.printคลังเครื่องมือสำหรับการเขียนลงบนกระดาษ
แนวคิดพื้นฐาน
วัตถุเหล่านี้เป็นส่วนประกอบที่จำเป็นในทุกการดำเนินการวาดภาพ 2 มิติด้วยภาษา Java
รูปทรง
ใน Java 2D รูปร่าง คือ ขอบเขตที่กำหนดด้านในและด้านนอก พิกเซลภายในรูปร่างจะได้รับผลกระทบจากการวาด ส่วนพิกเซลภายนอกจะไม่ได้รับผลกระทบ
การพยายามเติมสีลงในส่วนของเส้น ตรง จะไม่ส่งผลกระทบต่อพิกเซลใดๆ เนื่องจากรูปทรงดังกล่าวไม่มีพิกเซลอยู่ภายใน แต่ต้องใช้ รูปสี่เหลี่ยมผืนผ้า บางๆ แทน เพื่อให้รูปทรงนั้นมีพิกเซลอยู่บ้าง
สีทา
ฟังก์ชันการระบายสีจะสร้างสีที่จะใช้สำหรับแต่ละพิกเซลในการดำเนินการเติมสี ฟังก์ชันการระบายสีที่ง่ายที่สุดคือjava.awt.Colorสีเดียว ซึ่งจะสร้างสีเดียวกันสำหรับทุกพิกเซล ฟังก์ชันการระบายสีที่ซับซ้อนกว่าอาจสร้างการไล่ระดับสี รูปภาพหรือแม้แต่การผสมผสานของสีต่างๆ การเติมรูปทรงวงกลมโดยใช้สีเหลืองจะทำให้ได้วงกลมสีเหลืองทึบ ในขณะที่การเติมรูปทรงวงกลมเดียวกันโดยใช้ฟังก์ชันการระบายสีที่สร้างรูปภาพจะทำให้ได้รูปทรงวงกลมที่ตัดออกมาจากรูปภาพนั้น
วัสดุคอมโพสิต
ในระหว่างการวาดภาพใดๆ จะมีแหล่งที่มา (พิกเซลที่ถูกสร้างขึ้นโดยการวาด) และปลายทาง (พิกเซลที่ปรากฏอยู่บนหน้าจอแล้ว) โดยปกติแล้ว พิกเซลจากแหล่งที่มาจะเขียนทับพิกเซลปลายทาง แต่เทคนิคคอมโพสิตช่วยให้สามารถเปลี่ยนแปลงพฤติกรรมนี้ได้
การรวมภาพโดยใช้พิกเซลต้นทางและปลายทาง จะสร้างผลลัพธ์สุดท้ายที่จะปรากฏบนหน้าจอ การรวมภาพที่พบได้บ่อยที่สุดคือjava.awt.AlphaCompositeซึ่งสามารถกำหนดให้พิกเซลที่กำลังวาดมีความโปร่งใสบางส่วน เพื่อให้พิกเซลปลายทางแสดงออกมาได้ในระดับหนึ่ง
การเติม
ในการเติมสีลงในรูปทรง ขั้นตอนแรกคือการระบุว่าพิกเซลใดบ้างที่อยู่ภายในรูปทรง พิกเซลเหล่านี้จะได้รับผลกระทบจากการดำเนินการเติมสี พิกเซลที่อยู่ภายในและภายนอกรูปทรงบางส่วนอาจได้รับผลกระทบน้อยลงหากเปิดใช้งาน การลดรอยหยัก (anti-aliasing )
จากนั้นโปรแกรมจะสั่งให้สร้างสีสำหรับแต่ละพิกเซลที่จะระบาย ในกรณีทั่วไปของการเติมสีทึบ แต่ละพิกเซลจะถูกกำหนดให้มีสีเดียวกัน
กระบวนการคอมโพสิตจะนำพิกเซลที่สร้างขึ้นโดยสีมาผสมผสานกับพิกเซลที่มีอยู่แล้วบนหน้าจอเพื่อสร้างผลลัพธ์สุดท้าย
วัตถุขั้นสูง
วัตถุเหล่านี้สามารถมองได้ว่าทำหน้าที่ของมันในแง่ของวัตถุที่เรียบง่ายกว่าที่ได้อธิบายไว้ข้างต้น
แปลง
การดำเนินการ 2 มิติทุกอย่างใน Java จะต้องอาศัยการแปลง (transform ) เพื่อให้สามารถเลื่อน หมุน บิด และปรับขนาดรูปร่างได้ในขณะที่วาด การแปลงที่ใช้งานอยู่บ่อยที่สุดคือการแปลงเอกลักษณ์ (identity transform ) ซึ่งไม่มีผลใดๆ
การเติมสีโดยใช้การแปลงรูปทรง สามารถมองได้ว่าเป็นการสร้างรูปทรงใหม่ที่แปลงรูปทรงแล้ว จากนั้นจึงเติมสีลงในรูปทรงนั้น
จังหวะ
นอกจาก คำสั่ง เติมสีแล้ว Java 2D ยังมี คำสั่ง วาดสีอีกด้วย คำสั่งเติมสีจะวาดส่วนภายในของรูปทรง ในขณะที่คำสั่งวาดสีจะวาดเส้นขอบของรูปทรง เส้นขอบอาจเป็นเพียงเส้นบางๆ หรืออาจซับซ้อนกว่านั้น เช่น เส้นประที่มีขอบโค้งมนในแต่ละเส้น
ส่วนประกอบที่รับผิดชอบในการสร้างเส้นขอบคือเส้นวาด (stroke ) เมื่อได้รับรูปทรงเป็นอินพุต เส้นวาดจะสร้างรูปทรงใหม่ที่แสดงถึงเส้นขอบของรูปทรงนั้น ตัวอย่างเช่น เส้นตรงที่บางมาก (ไม่มีส่วนภายใน) อาจถูกวาดเป็นสี่เหลี่ยมผืนผ้าที่มีความกว้างหนึ่งพิกเซล
ดังนั้น การวาดจึงสามารถอธิบายได้ว่าเป็นการสร้างวัตถุใหม่ที่มีเส้นขอบ แล้วจึงเติมสีลงในวัตถุนั้น
ในทางเทคนิคแล้ว ฟังก์ชันการวาดเส้น (stroke) มีหน้าที่เพียงแค่รับรูปทรงที่ป้อนเข้ามาและสร้างรูปทรงใหม่ ฟังก์ชันการวาดเส้นที่มาพร้อมกับ Java 2D นั้นใช้กฎการกำหนดขอบเขตตามที่อธิบายไว้ข้างต้น แต่ฟังก์ชันการวาดเส้นที่เขียนขึ้นเองสามารถสร้างรูปทรงใดก็ได้ตามต้องการ
การเพิ่มประสิทธิภาพ
ในเชิงแนวคิด การวาดเส้นตรงสีดำใน Java 2D สามารถคิดได้ว่าเป็นการสร้างส่วนของเส้นตรง แปลงรูปทรงตามการแปลงปัจจุบัน ลากเส้นเพื่อสร้างสี่เหลี่ยมผืนผ้าบางๆ สอบถามรูปทรงนี้เพื่อคำนวณพิกเซลที่ได้รับผลกระทบ สร้างพิกเซลโดยใช้java.awt.Color.BLACKและจากนั้นรวมผลลัพธ์เข้ากับหน้าจอ
อย่างไรก็ตาม การทำตามขั้นตอนทั้งหมดนี้สำหรับทุกการวาดภาพจะไม่มีประสิทธิภาพมากนัก ดังนั้น Java 2D จึงปรับปรุงการวาดภาพทั่วไปเพื่อให้สามารถข้ามขั้นตอนเหล่านี้ได้หลายขั้นตอน ตัวอย่างเช่น หากสีที่ใช้เป็นสีทึบธรรมดา ก็ไม่จำเป็นต้องสั่งให้สร้างรายการสีที่จะใช้ระบาย ในทำนองเดียวกัน หากใช้คอมโพสิตแบบทึบแสงโดยค่าเริ่มต้น การสั่งให้ทำการประมวลผลคอมโพสิตก็ไม่จำเป็นและจะเสียเวลาเปล่า
Java 2D ทำงานให้น้อยที่สุดเท่าที่จำเป็นเพื่อให้ดูเหมือนว่าได้ดำเนินการทุกขั้นตอนสำหรับแต่ละการดำเนินการแล้ว จึงรักษาทั้งความยืดหยุ่นและประสิทธิภาพสูงเอาไว้ได้
ปลายทาง
เพื่อความง่าย ในบทความนี้ได้ยกตัวอย่างข้อความโดยสมมติว่าหน้าจอเป็นอุปกรณ์ปลายทาง อย่างไรก็ตาม ปลายทางอาจเป็นอะไรก็ได้ เช่น เครื่องพิมพ์ รูปภาพในหน่วยความจำ หรือแม้แต่วัตถุที่รับคำสั่งกราฟิก 2 มิติของ Java และแปลงคำสั่งเหล่านั้นเป็นไฟล์ภาพ กราฟิกแบบเวกเตอร์
การทำงานร่วมกันระหว่าง Java2D และ OpenGL
ตั้งแต่Java SE 6เป็นต้นมา Java2D และOpenGLสามารถทำงานร่วมกันได้ ทำให้สามารถวาดกราฟิก 3 มิติแบบเคลื่อนไหวแทนไอคอนบนปุ่มได้ (ดูJOGL )
ดูเพิ่มเติม
ลิงก์ภายนอก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ จาวา 2 มิติ
Java 2D เป็น API สำหรับวาด ภาพกราฟิก สองมิติ โดยใช้ ภาษาการ เขียน โปรแกรม Java [ 1 ] การดำเนินการวาดภาพ Java 2D ทุกอย่างสามารถถือได้ว่าเป็นการ เติมรูปร่าง โดย ใช้สี และ รวม...
องค์กร
Java 2D API และเอกสารประกอบสามารถดาวน์โหลดได้เป็นส่วนหนึ่งของ JDK 6 โดยคลาสของ Java 2D API จะถูกจัดระเบียบเป็นแพ็กเกจต่างๆ ดังต่อไปนี้ใน JDK 6:
แนวคิดพื้นฐาน
วัตถุเหล่านี้เป็นส่วนประกอบที่จำเป็นในทุกการดำเนินการวาดภาพ 2 มิติด้วยภาษา Java
รูปทรง
ใน Java 2D รูปร่าง คือ ขอบเขต ที่กำหนดด้านในและด้านนอก พิกเซล ภายในรูปร่างจะได้รับผลกระทบจากการวาด ส่วนพิกเซลภายนอกจะไม่ได้รับผลกระทบ