swing - Draw diagonal lines with Java -


मेरे पास निम्न कोड है:

  निजी _ x, _y, _w, _h; संरक्षित शून्य पेंटकंपोनेंट (ग्राफ़िक्स जी_) {g_.setStroke (नया बेसिकस्ट्रोक (2)); G_.drawline (_x, _y, _x + _w, _y + _h); G_.drawLine (_x, _y + _h, _x + _w, _y); }  

मेरे मामले में मैं एक वर्ग के विकर्ण चित्रण कर रहा हूँ: _w == _ h

मेरी समस्या दो पंक्ति वही स्पष्ट चीज नहीं है: पहली पंक्ति दूसरे से अधिक मोटी लगती है। जब वास्तविक पिक्सल की जांच हो रही है, तो यह रेंडरिंग का अंतर है:

स्ट्रोक 2px

मुझे वास्तव में कोई परवाह नहीं है कि किसको "सही" माना जाना चाहिए (हालांकि मैं इस परिणाम के कारणों को समझना चाहता हूं), लेकिन मुझे यहां कुछ संलिप्तता चाहिए, दोनों लाइनें समान प्रतिपादन करती हैं:

Olavi के ansewer के लिए अनुसरण करें:

(मैं एक 1px स्ट्रोक का उपयोग करते हैं, तो दो लाइनों के बीच कोई अंतर नहीं है) / P>

स्ट्रोक के लिए पिक्सेल की एक अजीब संख्या का प्रयोग करने से समस्या हल नहीं होती है:

स्ट्रोक 3 पीएक्स

एंटी-अलाइजिंग को सक्षम करने से दूसरी समस्या हो सकती है: जिस वर्ग में स्ट्रॉस खींचा जाता है वह स्ट्रोक धुंधला हो जाता है:

असल में आपके पास दो विकल्प हैं:

  1. एक विषम-संख्या का उपयोग करें नमस्ते
  2. एंटीलिअसिंग का उपयोग करें

व्यक्तिगत तौर पर मैं एंटीअलियासिंग पसंद करता हूं, क्योंकि यह बहुत ही सुंदर है और मुझे सुंदर चीजें पसंद हैं I हालांकि, यह समझाने के लिए कि 2 की एक स्ट्रोक चौड़ाई क्यों बर्ताव करती है: जावा यह नहीं जानता है कि रेखा को पहली तरह से या दूसरे तरीके से खींचना है या नहीं (मैं सचमुच नहीं समझा सकता है कि ऐसा क्यों करता है, लेकिन यह वही है समझा)। इस जवाब को और अधिक विस्तृत करने के लिए, दूसरी पंक्ति को एक पिक्सेल को बाएं या दाएं से शुरू करने का प्रयास करें: इसका दो मोहरा समान मोटाई के साथ होना चाहिए।

एंटीलिअसाइजिंग का उपयोग करने के लिए, निम्नलिखित (untested code! )। कोड से उठाया:

  ग्राफिक्स 2 डी ग्राफिक्स 2 डी = (ग्राफिक्स 2 डी) जी_; Graphics2D.setRenderingHint (रेंडरिंग हिंट्स। KEY_ANTIALIASING, रेंडरिंग हिंट्स। VALUE_ANTIALIAS_ON); Graphics2D.drawline (_x, _y, _x + _w, _y + _h); Graphics2D.drawline (_x, _y + _h, _x + _w, _y);  

Comments