บนพื้นฐานของคลาสกราฟิกที่ให้รูปทรงเรขาคณิตพื้นฐานต่างๆ ภาษา Java ขยายคลาสกราฟิกเพื่อให้คลาส Graphics2D ซึ่งมีความสามารถในการประมวลผลกราฟิกสองมิติที่ทรงพลังยิ่งขึ้น และให้การแปลงพิกัด การจัดการสี และเค้าโครงข้อความที่แม่นยำยิ่งขึ้น . ควบคุม.
คุณสมบัติการวาด
Graphics2D กำหนดวิธีการต่างๆ ในการเพิ่มหรือเปลี่ยนแปลงคุณสมบัติสถานะของกราฟิก คุณสามารถระบุความกว้างของแปรงและวิธีการเชื่อมต่อของแปรงโดยการตั้งค่าและแก้ไขคุณสมบัติสถานะ การตั้งค่าการแปล การหมุน การปรับขนาด หรือการตัดทอนกราฟิกการแปลง และการตั้งค่าสีและรูปแบบของกราฟิกที่เติมไว้ ฯลฯ คุณสมบัติสถานะกราฟิกจะถูกจัดเก็บโดยใช้วัตถุเฉพาะ
1. คุณลักษณะจังหวะ
คุณสมบัติเส้นขีดควบคุมความกว้างของเส้น ลักษณะปากกา วิธีการเชื่อมต่อส่วนต่างๆ หรือรูปแบบเส้นประ ในการตั้งค่าคุณสมบัตินี้ คุณต้องสร้างออบเจ็กต์ BasicStroke ก่อน จากนั้นจึงเรียกใช้เมธอด setStroke() เพื่อตั้งค่า วิธีการสร้างวัตถุ BasicStroke คือ:
BasicStroke(float w): ระบุความกว้างของเส้น w
BasicStroke (ลอย w, int cap, int join):
cap คือจุดสิ้นสุด: CAP_BUTT (ไม่ได้แก้ไข), CAP_ROUND (ปลายครึ่งวงกลม), CAP_SQUARE (ปลายสี่เหลี่ยม, ค่าเริ่มต้น)
เข้าร่วมกำหนดวิธีการเชื่อมต่อที่จุดตัดของส่วนของเส้นสองเส้น: JOIN_BEVEL (ไม่มีการแก้ไข), JOIN_MTTER (ปลายแหลม, ค่าเริ่มต้น), JOIN_ROUND (ปลายโค้งมน)
2. คุณลักษณะการทาสี
คุณสมบัติสีจะควบคุมเอฟเฟกต์การเติม ขั้นแรกให้เรียกใช้เมธอดต่อไปนี้เพื่อกำหนดเอฟเฟกต์การเติม และใช้เมธอด setPaint() เพื่อตั้งค่า
การไล่ระดับสี(ลอย x1,ลอย y1,สี c1,ลอย x2,flaot y2,สี c2): จาก (x1,y1) ถึง (x2,y2) การไล่ระดับสีจาก c1 ถึง c2 ในหมู่พวกเขา: พารามิเตอร์ c1 และ c2 กำหนดสีไล่ระดับสีจากสี c1 ถึงสี c2 พารามิเตอร์ x1, y1, x2, y2 กำหนดความแข็งแกร่งของการไล่ระดับสีนั่นคือเริ่มต้นจากจุด (x1, y1) ไปยังจุด (x2, y2) สีจะเปลี่ยนจาก c1 เป็น c2
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, Boolean cyclic): หากคุณต้องการให้การไล่ระดับสีสิ้นสุดและเป็นสีของจุดเริ่มต้น cyclic ควรตั้งค่าเป็นจริง
3. คุณลักษณะการแปลง
แอ็ตทริบิวต์การแปลงใช้เพื่อดำเนินการแปลงทั่วไป เช่น การแปลกราฟิก การปรับขนาด และการเอียง ขั้นแรกให้สร้างวัตถุ AffineTransform จากนั้นเรียกใช้เมธอด setTransform() เพื่อตั้งค่าแอตทริบิวต์การแปลง สุดท้าย กราฟิกจะถูกวาดโดยใช้วัตถุ Graphics2D ที่มีคุณสมบัติที่ระบุ วิธีการสร้างวัตถุ AffineTransform คือ:
คุณยังสามารถสร้างวัตถุ AffineTransform โดยไม่มีแอตทริบิวต์การแปลงก่อน จากนั้นใช้วิธีการต่อไปนี้เพื่อระบุแอตทริบิวต์การแปลงกราฟิก การหมุน และการปรับขนาด
ตัวอย่างเช่น สร้างวัตถุ AffineTransform:
AffineTransform ทรานส์ = AffineTransform ใหม่ ();
ระบุคุณสมบัติการเปลี่ยนแปลงการหมุนรอบจุดสำหรับวัตถุ AffineTransform:
ทรานส์หมุน (50.0*3.1415927/180.0,90,80);
จากนั้นตั้งค่า "แปรง" ด้วยฟังก์ชันการแปลงการหมุนด้านบนสำหรับวัตถุ Graphics2D g2d:
Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(ทรานส์);
สุดท้ายนี้ วิธีการวาด() ของอ็อบเจ็กต์ Graphics2D ที่มีฟังก์ชันการแปลงจะถูกเรียกโดยใช้อ็อบเจ็กต์กราฟิกเป็นพารามิเตอร์ ตัวอย่างเช่น สมมติว่ามีเส้นโค้งของวัตถุเส้นโค้งกำลังสอง โค้ดต่อไปนี้จะใช้การวาดเส้นโค้งกำลังสองนี้โดยใช้วัตถุ g2d ที่มีฟังก์ชันการหมุนด้านบน:
g2d.draw(เส้นโค้ง);
4. คุณลักษณะคลิป
คุณลักษณะ clip ถูกใช้เพื่อให้ได้เอฟเฟกต์การคลิป ในการตั้งค่าแอตทริบิวต์การตัด คุณสามารถเรียกใช้เมธอด setClip() เพื่อกำหนดรูปร่างของพื้นที่การตัด การดำเนินการ setClip() หลายรายการจะดำเนินการติดต่อกันเพื่อให้ได้พื้นที่คลิปที่ตัดกัน
5. คุณลักษณะคอมโพสิต
คุณลักษณะ composit จะกำหนดผลกระทบของพื้นที่ที่ทับซ้อนกันของกราฟิก ขั้นแรกให้ใช้เมธอด AlphaComposite.getInstance(int rule, float alpha) เพื่อรับอ็อบเจ็กต์ AlphaComposite จากนั้นตั้งค่าเอฟเฟกต์การผสมผ่านเมธอด setComposite() ค่าอัลฟ่ามีตั้งแต่ 0.0f (โปร่งใสเต็มที่) ถึง 0.1f (ทึบแสงเต็มที่)
วิธีการวาดคลาส Graphics2D
คลาส Graphics2D ยังคงรักษาวิธีการวาดของคลาส Graphics ไว้ ขณะเดียวกันก็เพิ่มวิธีการใหม่มากมาย วิธีการใหม่จะวาดรูปทรงเรขาคณิต (ส่วนของเส้น วงกลม ฯลฯ) ให้เป็นวัตถุ ชุดของคลาสที่ประกาศในแพ็คเกจ java.awt.geom ใช้เพื่อสร้างอ็อบเจ็กต์กราฟิกเนื้อหาต่างๆ สิ่งสำคัญคือ:
คลาสส่วนของเส้น Line2D, คลาสสี่เหลี่ยมผืนผ้าโค้งมน RoundRectangle2D, คลาสวงรี Ellipse2D, คลาสส่วนโค้ง Arc2D, คลาสเส้นโค้งกำลังสอง QuadCurve2D, คลาสเส้นโค้งลูกบาศก์ลูกบาศก์ Curve2D
ในการวาดภาพกราฟิกโดยใช้วิธีการใหม่ของคลาส Graphics2D ขั้นแรก ในวิธีการวาดใหม่ paintComponent() หรือ Paint() บังคับให้วัตถุพารามิเตอร์ g เข้าไปในวัตถุ Graphics2D จากนั้นใช้วิธีคงที่ Double() ที่ได้รับจากคลาสกราฟิกด้านบนเพื่อสร้างวัตถุของกราฟิก วัตถุกราฟิกเป็นพารามิเตอร์ เรียกเมธอด Draw() ของวัตถุ Graphics2D เพื่อวาดกราฟิกนี้ ตัวอย่างเช่น โค้ดต่อไปนี้ใช้วิธีการใหม่ของ Graphics2D เพื่อวาดส่วนของเส้นและสี่เหลี่ยมมุมมน:
Graphics2D g2d = (Graphics2D)g;//แปลงประเภทวัตถุ g จาก Graphics2D Line2D = new Line2D.Double(30.0,30.0,340.0,30.0); RoundRectangle2D rRect = new RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0); g2d.draw(rRect);
ขั้นแรกคุณยังสามารถใช้ออบเจ็กต์ Shape ที่ได้รับจากแพ็กเกจ java.awt.geom สร้างออบเจ็กต์ Shape ด้วยพิกัดโฟลตที่มีความแม่นยำเดี่ยวหรือพิกัดสองเท่าที่มีความแม่นยำสองเท่า จากนั้นจึงวาดโดยใช้เมธอด Draw() ตัวอย่างเช่น รหัสต่อไปนี้สร้างวัตถุส่วนโค้งแล้ววาดส่วนโค้ง:
รูปร่าง arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN); g2d.draw(arc)//วาดส่วนโค้งของวัตถุกราฟิกที่สร้างขึ้นก่อนหน้านี้
คลาสเรขาคณิตของ Graphics2D
ส่วนของเส้น
Line2D line = new Line2D.Double(2,3,200,300);//ประกาศและสร้างวัตถุส่วนของเส้น//จุดเริ่มต้นคือ (2, 3) และจุดสิ้นสุดคือ (200, 300)
สี่เหลี่ยมผืนผ้า
สี่เหลี่ยมผืนผ้า 2D = ใหม่ สี่เหลี่ยมผืนผ้า 2D.Double (20,30,80,40); // ประกาศและสร้างวัตถุสี่เหลี่ยมผืนผ้า มุมซ้ายบนของสี่เหลี่ยมผืนผ้าคือ (20, 30) ความกว้าง 300 และความสูง 40
สี่เหลี่ยมผืนผ้าโค้งมน
RoundRectangle2D rectRound = ใหม่ RoundRectangle2D.Double(20,30,130,100,18,15); // มุมซ้ายบนคือ (20, 30), ความกว้างคือ 130, ความสูงคือ 100, แกนยาวของมุมโค้งมนคือ 18, และแกนสั้นคือ 15
วงรี
Ellipse2D ellipse = ใหม่ Ellipse2D.Double(20,30,100,50); // มุมซ้ายบน (20, 30) ความกว้าง 100 ความสูง 50
อาร์ค
Arc2D arc1 = ใหม่ Arc2D.Double(8,30,85,60,5,90,Arc2D.OPEN); // มุมซ้ายบนของสี่เหลี่ยมล้อมรอบ (10, 30), กว้าง 85, สูง 60, มุมเริ่มต้นคือ 5 องศา มุมสิ้นสุดคือ 90 องศา Arc2D arc2 = ใหม่ Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD); Arc2D arc3 = ใหม่ Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
พารามิเตอร์ Arc2D.OPEN, Arc2D.CHORD และ Arc2D.PIE ตามลำดับบ่งชี้ว่าส่วนโค้งเป็นส่วนโค้งเปิด ส่วนโค้งโค้ง หรือส่วนโค้งพาย
เส้นโค้งกำลังสอง เส้นโค้งกำลังสองแสดงด้วยพหุนามลำดับที่สอง:
y(x)=ax2+bx+c
เส้นโค้งกำลังสองจะต้องกำหนดโดยจุดสามจุด ได้แก่ จุดเริ่มต้น จุดควบคุม และจุดสิ้นสุด
QuadCurve2D curve1 = QuadCurver2D ใหม่ (20,10,90,65,55,115); QuadCurve2D curve2 = ใหม่ QuadCurver2D.Double (20,10,15,63,55,115); QuadCurver2D.ดับเบิ้ล(20,10,54,64,55,115);
พารามิเตอร์ทั้งหกในวิธี Double() คือจุดเริ่มต้น จุดควบคุม และจุดสิ้นสุดของเส้นโค้งกำลังสอง จุดเริ่มต้นและจุดสิ้นสุดของเส้นโค้งกำลังสองสามเส้นข้างต้นเหมือนกัน
เส้นโค้งลูกบาศก์ เส้นโค้งลูกบาศก์แสดงด้วยพหุนามลำดับที่สาม:
y(x)=ax3+bx2+cx+d
เส้นโค้งลูกบาศก์ต้องใช้สี่จุดในการกำหนด: จุดเริ่มต้น จุดควบคุมสองจุด และจุดสิ้นสุด
CubicCurve2D curve1 = ใหม่ CubicCurve2D.Double(12,30,50,75,15,15,115,93); CubicCurve2D curve2 = ใหม่ CubicCurve2D.Double(12,30,15,70,20,25,35,94); = ใหม่ CubicCurve2D.ดับเบิ้ล(12,30,50,75,20,95,95,95);
พารามิเตอร์แปดตัวในวิธี Double() คือจุดเริ่มต้น จุดควบคุมสองจุด และจุดสิ้นสุดของเส้นโค้งลูกบาศก์
กระบวนการวาดเส้นโค้งสมการทั่วไปถูกควบคุมโดยการวนซ้ำ สร้างค่าของตัวแปรอิสระผ่านการวนซ้ำ คำนวณค่าฟังก์ชันตามสมการ จากนั้นดำเนินการแปลงพิกัดที่จำเป็น: การแปลงการแปลสำหรับการวางตำแหน่งต้นทาง การแปลงขนาดเพื่อลดหรือขยายภาพ รับจุดภาพของเส้นโค้ง และวาดจุดนี้ วาดสมการเส้นโค้งต่อไปนี้เป็นตัวอย่าง:
Y=ซิน(x)+คอส(x),x
ส่วนหนึ่งของโค้ดรูปวาดสามารถเขียนได้ดังนี้:
สองเท่า x0,y0,x1,y1,x2,y2,สเกล;x0=100;y0=80;สเกล =20.0;สำหรับ(x1=-3.1415926d;x1<=2*3.1415926d;x1+=0.01d){ y1 =Math.sin(x1)+Math.cos(x1); x2=x0+x1*scale;y2=y0+y1*scale;//(x2,y2) คือจุดรูปภาพ g.fillOval((int)x2,(int)y2,1,1);//วาด a จุดวงกลมเป็นจุดภาพ}