- 締切済み
画像の上でペイント
画像の上にお絵かきがしたいと思っています 今の段階では、書くことはできます。 しかし、書いたものを消すことができません・・・。 他のペイントのサンプルを見ましたが、消しゴム機能はただカラーを背景色と同色で上塗り(?)してるだけでした。 僕が求めているものとしては、書いてある物を消して背景の画像が映るというようにしたいんです!! ペイントパネルのソースの一部です 自分なりに必要だと思うところを抜き出してみました //鉛筆(黒) public void pat1(Graphics2D g2d) { rc = gc = bc = 0; count = 255; g2d.setStroke( new BasicStroke( 3.0F ) ); g2d.setPaint(new Color(rc, gc, bc, count)); g2d.fillOval(currentPoint.x, currentPoint.y, 10, 10); g2d.dispose(); } //消しゴム(白) public void pat2(Graphics2D g2d) { rc = gc = bc = 254; count = 0; g2d.setStroke( new BasicStroke( 3.0F ) ); g2d.setPaint(new Color(rc, gc, bc, count)); g2d.fillOval(currentPoint.x, currentPoint.y, 10, 10); g2d.dispose(); } //リスナークラスの定義 class MoveLis extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) { Point p = e.getPoint(); if (offImage == null) { // ここは注意が必要 ⇒ BufferedImage.TYPE_INT_ARGB // BufferedImage.TYPE_INT_RGBを使うと下のレイヤーの画像が塗り消されてしまいます // アルファチャネルも追加しておく offImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); } Graphics2D g2d = (Graphics2D) offImage.createGraphics(); switch(graPattern){ case 1:pat1(g2d); break; case 2:pat2(g2d); break; } repaint(); //座標取得 currentPoint = e.getPoint(); } } public void paintComponent( Graphics g ) { super.paintComponent( g ); if ( offImage != null ) { g.drawImage( offImage, 0, 0, this ); } } 回答よろしくお願いします
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
-やり方1- 背景の画像のレイヤーとお絵描きするレイヤーを分ける。お絵描きレイヤーの初期状態は全面透明。 2つのレイヤーを重ねて表示する。 消しゴム機能は、お絵描きレイヤーの該当部分を透明に戻すだけ。 -やり方2- 消しゴム機能で画像を元に戻すとき、背景色で塗るのではなく、背景画像の該当座標から1ドットずつ色情報を拾ってきて塗る。 元々の背景画像のデータにアクセスできるように保持しておく必要あり。 具体的なコードは書きません。
お礼
回答ありがとうございました