2017-01-15 21 views
1

現在、私はLCD用のライブラリを作成しています。私はGraphicsクラスをJavaで拡張して、ユーザーがより便利にLCDに描画できるようにしました。java.awt.Graphicsクラスの実装

しかし、これらのメソッドをオーバーライド/書き込みが非常にMIND-排気WORKです。私は、BresenhamのラインアルゴリズムとfillRect(),clearRect()を使用してピクセルを黒と白で塗りつぶして、drawLine()を実装しました。しかし、それはほとんど私を殺したようです。

私はグラフィッククラスでoriginal implementationを見てきました: まあ、抽象です。何も実装されていませんXD

また、スイングワンで希望はありません。実装はプラットフォームに依存しているようです。

Graphicsクラスにはソースがありますので、実装を見ることができますか?

これは本当に愚かな作業ですか?

+0

をメソッドをフックすると、コードやパフォーマンス、それのか、何を書くの面で重い何を意味するのですか? – nullpointer

+0

消耗し、ピクセルに高濃度を必要とします... – mob41

答えて

0

私は、Graphicsクラスの実装に画像を置きます。そして*(いるgetGraphicsを使用してグラフィックスを取得)し、*「非常に重いWORK」を言うとき、それに

public SampleGraphics extends Graphics2D{ 

    private final Graphics2D g2d; 

    private final BufferedImage buffImg; 

    public SampleGraphics(String someargs){ 
     //Perform things... 
     buffImg = ..... 
     g2d = buffImg.getGraphics(); 
    } 

    @Override 
    public Graphics create(){ 
     return g2d.create(); 
    } 

    //...each method identical to the Graphics2D g2d 
} 
0

あなたは公式OpenJDKのサイトから入手することができますの完全なOpenJDKのJavaソースツリーにGraphicsクラスの様々な実装があります。ダウンロードページJava 8 Source Codeをご覧ください。

どんなにあなたは多くの作業をされる新しいGraphicsクラスを実装し、それを行う方法。しかし、私はそれが "ばかげた"ことだと言う用意はない。なぜそれをやっているのかによって異なります。すなわち努力が「十分に費やされる」ものであるかどうかを判断する。あなただけがその電話をかけることができます。

+0

あなたは1つを述べることができますか?抽象クラスは役に立ちません。 – mob41

+0

頭の上から外れません。しかし、完全なソースコードをダウンロードした場合は、例が見つかります。 (私は今使用しているマシンにコピーを持っていません) –

0

これはかなり愚かな作業です。

  • すでに実行されています。あなたは画素毎に作業している場合

  • 、間違ったレベルで作業しています。

  • はPERFの理由から、これは可能な場合はOpenGLを使用して、ハードウェア・アクセラレーションを介して行われるべきものです。 、それはCに落下し、直接JavaのレベルではVRAM、ないにアクセスすることによって行われるべきではないとしても

  • 。画面を黒に設定すると、memsetを1回呼び出すようになります。

+0

ライブラリはLCDフレームバッファに直接書き込んでいます。また、LCDは0,1でピクセルを塗り替える代わりの方法を使用しているため、OpenGLはほとんど不可能です。あなたはev3devプロジェクトを聞いたことがありますか?私はev3devでLCDを使用しています。 – mob41

+0

それから私はまだ最初からそれをしないでしょう、私は実装を見つけると、ピクセル書き込みを変更します。たとえば、http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/java2d/SunGraphics2D.java?av = h#SunGraphics2D –

+0

私は夜中にコードを見ました。ピクセル書き込みを変更する方法が見つかりません。 '' RenderingEngine''はネイティブ側からのものです(クローズドソース)。私は一からやらなければならないと思う。 – mob41

関連する問題