2017-09-29 19 views
0

私の絵画の各行が前の行のペイントに依存するプログラムを作成しています。新しいペイントでは指定された座標で前の行のRGB値が必要なので、JPanelをBufferedImageに変換してgetRGB()を使用してColorを取得します。既存の画像に描画する

新しい行のイメージを作成するときに、最初のイメージの転送に問題があります。

次のコードでは、行は、インスタンス変数である

@Override 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     if(line==1) 
     { 
      g.setColor(Color.WHITE); 
      g.fillRect(0,0,100,100); 
      g.setColor(Color.RED); 
      g.fillRect(25,25,20,20); 
     } 
     else if(line!=1) 
     { 
      g=img.getGraphics(); 
      g.setColor(Color.BLUE); 
      g.fillRect(50,50,25,25); 
     } 
    } 

をワーク・ないとIMGは線で最初行連結

Paint_Test ob=new Paint_Test(); 
frame.add(ob); 
img=toBufferedImage(ob); 

のBufferedImageのある

g=img.getGraphics(); 

私は元のbufferedimageのグラフィックスオブジェクトを取得しようとしており、その上に描画しています。代わりに、出力に入るのは空白の画面です(理想的な出力は2つの正方形、1つは赤、もう1つは青です)。

私はどこが間違っているのか、どのように修正できるのか教えてください。あなたの助けが大いに評価されるでしょう。

ありがとうございます!

+1

適切な[mcve]をすぐに投稿するために、 'else if(line!= 1)'行を 'else'だけ書き換えることもできます。 – Frakcool

答えて

0

ありインクリメンタル塗装のための2つの一般的なアプローチです:

  1. 塗料のBufferedImageには、その後、ペイントするオブジェクトのArrayListのを保つ画像
  2. を描きます。次に、ArrayListを反復処理してすべてのオブジェクトをペイントします。

各アプローチの詳細と実際の使用例については、Custom Painting Approachesを参照してください。

0

Camickrの回答は素晴らしいです。あなたは簡単な修正を探しているなら代わりにのないfurther-

を行っていないグラフィックス画像に反対を割り当てる私は単にこれは、所望の結果を生成するイメージ -

g.drawImage(img,0,0,null); 

を描かれている必要があります。

関連する問題