2013-07-15 9 views
6

私は、テキストを取得し、シャドーエフェクトを持つアイコンを生成してさまざまなコンポーネント(以下に示す)に割り当てるためのコードスニペットを持っています。これはうまくいきました。Java 7では、アンチエイリアスのロジックが変更されましたが、Java 6では同じコードが素晴らしいように見えるのに対して、今はかなり馬鹿げています。Java 7のアンチエイリアスはどうなりましたか?

それだけで特定の色の組み合わせで発生するようですので、最後の画像は実際に、OKに見えます...いずれにしても

は、誰もがJavaの7にAAで何が変わったのかまたはそれをバックに変更する方法を知っていませんか、 Java 6のようにこの作業を行いますか?私はAAを壊すために誰かに不平を言うのですか?ハハ...

ご協力いただきありがとうございます!

AA http://i43.tinypic.com/v5v5vr.jpg

package mainpackage; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.font.TextAttribute; 
import java.awt.font.TextLayout; 
import java.awt.image.BufferedImage; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.text.AttributedString; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class AntiAliasProblems 
{ 
    private static final long serialVersionUID = 1L; 
    private static Font font = new Font("Arial", Font.BOLD, 12); 

    public static ImageIcon makeShadowIcon1() 
    { 
     AttributedString as = new AttributedString("Delete"); 
     as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, 0, 1); 
     as.addAttribute(TextAttribute.FONT, font);  

     BufferedImage image = new BufferedImage(75, 23, BufferedImage.TRANSLUCENT); 
     Graphics2D g2 = image.createGraphics(); 

     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
     g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 

     TextLayout textLayout = new TextLayout(as.getIterator(), g2.getFontRenderContext());     

     g2.setPaint(java.awt.Color.white); 
     textLayout.draw(g2, 19, 17); 

     g2.setPaint(new java.awt.Color(0x00, 0x3D, 0x76)); 
     textLayout.draw(g2, 19, 16); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(1000); 

     try 
     { 
      ImageIO.write(image, "png", baos); 
      baos.flush(); 
      baos.close(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 

     g2.dispose(); 

     return new ImageIcon(baos.toByteArray()); 
    } 

    public static ImageIcon makeShadowIcon2() 
    { 
     AttributedString as = new AttributedString("Delete"); 
     as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, 0, 1); 
     as.addAttribute(TextAttribute.FONT, font);  

     BufferedImage image = new BufferedImage(75, 23, BufferedImage.TRANSLUCENT); 
     Graphics2D g2 = image.createGraphics();  
     TextLayout textLayout = new TextLayout(as.getIterator(), g2.getFontRenderContext());  

     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
     g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 

     g2.setPaint(java.awt.Color.white); 
     textLayout.draw(g2, 19, 17); 

     g2.setPaint(new java.awt.Color(0x00, 0x3D, 0x76)); 
     textLayout.draw(g2, 19, 16); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(1000); 

     try 
     { 
      ImageIO.write(image, "png", baos); 
      baos.flush(); 
      baos.close(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 

     g2.dispose(); 

     return new ImageIcon(baos.toByteArray()); 
    } 

    public static ImageIcon makeShadowIcon3() 
    { 
     AttributedString as = new AttributedString("Delete"); 
     as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, 0, 1); 
     as.addAttribute(TextAttribute.FONT, font);  

     BufferedImage image = new BufferedImage(75, 23, BufferedImage.TRANSLUCENT); 
     Graphics2D g2 = image.createGraphics();  

     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
     g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 

     TextLayout textLayout = new TextLayout(as.getIterator(), g2.getFontRenderContext());   

     g2.setPaint(java.awt.Color.black); 
     textLayout.draw(g2, 19, 15); 

     g2.setPaint(java.awt.Color.white); 
     textLayout.draw(g2, 19, 16); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(1000); 

     try 
     { 
      ImageIO.write(image, "png", baos); 
      baos.flush(); 
      baos.close(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 

     g2.dispose(); 

     return new ImageIcon(baos.toByteArray()); 
    } 

    public static void main(String s[]) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     {   
      @Override 
      public void run() 
      { 
       JFrame frame = new JFrame("Anti-Alias Issue"); 

       frame.addWindowListener(new WindowAdapter() 
       { 
        public void windowClosing(WindowEvent e) 
        { 
         System.exit(0); 
        } 
       }); 

       JPanel panel = new JPanel(); 
       panel.setPreferredSize(new Dimension(300, 33)); 

       JButton button1 = new JButton(makeShadowIcon1()); 
       button1.setPreferredSize(new Dimension(75, 23)); 
       button1.setBackground(Color.PINK); 

       JButton button2 = new JButton(makeShadowIcon2()); 
       button2.setPreferredSize(new Dimension(75, 23)); 
       button2.setBackground(Color.PINK); 

       JButton button3 = new JButton(makeShadowIcon3()); 
       button3.setPreferredSize(new Dimension(75, 23)); 
       button3.setBackground(Color.PINK); 

       panel.add(button1); 
       panel.add(button2); 
       panel.add(button3); 

       frame.setContentPane(panel); 
       frame.pack(); 
       frame.setVisible(true); 
       frame.setLocationRelativeTo(null); 
      } 
     });  
    } 
} 
+0

VGAアプリケーションプロファイルを確認してください。アプリケーションがVGAプロファイルを持っている場合、GPUは設定を上書きします。私にとってはうれしいですよね:) –

+0

btw、あなたのJDKをアップデートしてください、それはバグかもしれません[https:// netbeans。 org/bugzilla/show_bug.cgi?id = 216655](https://netbeans.org/bugzilla/show_bug.cgi?id=216655) –

+0

@user 2511414 - Java 7でこのコードを実行すると、 AAはよく見える?あなたはJava 7であなたのためにどのように見えるのスクリーンショットを共有し、あなたが使用してビルドしてもよろしいですか?私は1.7.0_25を使用しています。私もGPUのレンダリング設定で遊んでみましたが、それは何も変えていないようです... 助けてくれてありがとう! – PAULUS

答えて

6

アンチエイリアシングは、実際にJava7に変更されました。 link Java7では実際のAAコードが変更されたように見えるので、現時点では元に戻すことはできませんでした。だから、あなたはAAを破壊するためにOracleを責めることができます。私が遭遇した解決策はJava6に戻すことです(これはOSXの最新バージョンでは不可能です)。私がもっと助けてくれることを願っていますが、私が考えることができる唯一の解決策は、オープンソースライブラリとは異なるAAコードを使用することです。これが少し助けてくれるといいなあと思う。

関連する問題