2012-09-13 22 views
8

This question has been asked before, ancak cevaplar sorunu çözmüyor, bu yüzden tekrar soruyorum.Swing'de subpixel hassasiyetli çizgiler çizmenin bir yolu var mı?

yerine g2.drawLine kullanmak yerine, line bir Line2D.Double olduğunu g2.draw(line), kullanabileceği öne sürüldü. Ancak, ekran görüntüsünden de görebileceğiniz gibi, çizgiler bir tamsayı pikseliyle bittikleri gibi çekilir (her 10 satırlık dizi tam olarak paraleldir).

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

yüzden doğru bir pikselin üzerinde tam olarak sona ermez satırları işlemek için Swing imkansızdır?

+1

Eğer g2d.setRenderingHint deneyebilir miyim (RenderingHints .KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); ? http://stackoverflow.com/questions/5018635/java-does-subpixel-line-accuracy-require-an-affinetransform – I82Much

+0

Kenar piksellerini farklı bir renkte (subpixel)/graytone (subpixel olmayan antialiasing) çizmelisiniz. – ninjalj

+0

@ I82Much Bu işe yarıyor! Bunu bir cevap olarak eklemelisiniz! –

cevap