2012-09-13 8 views
8

This question has been asked before, लेकिन उत्तर समस्या को हल नहीं करते हैं, इसलिए मैं इसे फिर से पूछता हूं।स्विंग में उप-पिक्सेल परिशुद्धता के साथ रेखाएं खींचने का कोई तरीका है?

यह सुझाव दिया गया है कि बजाय g2.drawLine का उपयोग कर के, आप g2.draw(line), जहां line एक Line2D.Double है इस्तेमाल कर सकते हैं। हालांकि, जैसा कि आप स्क्रीनशॉट से देख सकते हैं, लाइनें अभी भी खींची गई हैं जैसे कि वे एक पूर्णांक पिक्सेल पर समाप्त हो गए हैं (10 लाइनों का प्रत्येक सेट बिल्कुल समानांतर है)।

import javax.swing.*; 
import java.awt.*; 
import java.awt.geom.Line2D; 

public class FrameTestBase extends JFrame { 

    public static void main(String args[]) { 
     FrameTestBase t = new FrameTestBase(); 
     t.add(new JComponent() { 
      public void paintComponent(Graphics g) { 
       Graphics2D g2 = (Graphics2D) g; 
       g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
         RenderingHints.VALUE_ANTIALIAS_ON); 
       for (int i = 0; i < 50; i++) { 
        double delta = i/10.0; 
        double y = 5 + 5*i; 
        Shape l = new Line2D.Double(5, y, 200, y + delta); 
        g2.draw(l); 
    // Base case, with ints, looks exactly the same: 
    //    g2.drawLine(5, (int)y, 200, (int)(y + delta)); 
       } 
      } 
     }); 

     t.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     t.setSize(220, 300); 
     t.setVisible(true); 
    } 
} 

non-parallel lines

तो यह स्विंग सही ढंग से लाइनों है कि वास्तव में एक पिक्सेल पर समाप्त नहीं रेंडर करने के लिए में असंभव है?

+1

आप g2d.setRenderingHint कोशिश कर सकते हैं (RenderingHints .KEY_STROKE_CONTROL, रेंडरिंगहिंट्स। VALUE_STROKE_PURE); ? http://stackoverflow.com/questions/5018635/java-does-subpixel-line-accuracy-require-an-affinetransform – I82Much

+0

आपको किनारे पिक्सल को एक अलग रंग (उप-पिक्सेल)/ग्रेटोन (गैर-उप-पिक्सेल एंटीअलाइजिंग) में खींचना चाहिए। – ninjalj

+0

@ I82Much ऐसा लगता है कि काम करता है! आपको इसे एक उत्तर के रूप में जोड़ना चाहिए! –

उत्तर

संबंधित मुद्दे