- - PR -
画像を淡くし背景が透き通らない描画をするには
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-12 16:48
余談です。
java.awt.Graphic2Dを使用せず、java.awt.Graphicsしか使えない、 または使わないという前提があるならば、下記は参考までに。 今でも、1990年代にAppletを使用していた頃に書かれたんだろうなと 思うようなコードには、drawLine(),drawPolygon()とかを散見しますが、 Graphic2Dを使用する場合、GraphicsクラスのdrawLine(),fillPolygon(), fillRect()とかは、使用しないほうが良いです。 理由は、Shapeを変更すれば、すぐに描画内容を変更できるコードができるため、 メンテナンスも楽になるし、拡張性も高くなるためです。 では、代わりに何を使用するかといえば、上記メソッドの代わりに、draw(java.awt.Shape),fill(java.awt.Shape)を使用します。 #描画処理のために、一々Shapeオブジェクトを生成したくないとか、 #メンテナンスや拡張性より今すぐ動くものが欲しいとの刹那的発想や #Shapeオブジェクトを生成するのがメンドクサイなら話は別ですが。 これは、オブジェクト指向の多態性を理解していれば、理由は分かるでしょう。 同様に、Graphics#setClip(int, int, int, int)や、Graphics#setColor(java.awt.Color)も使用しないほうが良いです。 理由は前述のとおり、メンテナンスと拡張性のためです。 代わりに、Graphics#setClip(Shape),Graphics2D.setPaint(java.awt.Paint)を 使用します。 コード中にsetColorの代わりに、setPaint()を使用しておけば、後にjava.awt.TexturePaint、java.awt.GradientPaintや独自に作成した java.awt.Paint実装クラスに切り替えることが容易になります。 まぁ、これらのメソッドをGraphics2Dではなく、Graphicsに実装してくれれば、 理解も操作も楽で良いのにと思いますが。 | ||||
|
投稿日時: 2006-11-12 17:58
一つだけ質問です。
イメージを描画したあとで、背景を描画すると、イメージが消えると思うのですが違うのでしょうか。 | ||||
|
投稿日時: 2006-11-12 19:38
間違っていたら、すみません。 私が、勝手に想定していたレベルとギャップがありました。 クリップの意味が分からないのであれば、これ以上説明しても仕方がないので、 クリップの意味を勉強してから、もう一度読み返してください。 | ||||
|
投稿日時: 2006-11-13 13:38
やりたいのはこう言う事ですか?
透過部分のあるGIFだかPNGだかを読み込んで、 アルファ値をそのままにして、RGBを白っぽくしてます。 | ||||
|
投稿日時: 2006-11-13 14:11
http://www.javaroad.jp/bbs/answer.jsp?q_id=20061111111749890
コードを掲載してくれている人もいますので、こちらにもレスをいただけませんか。 | ||||
|
投稿日時: 2006-11-13 15:38
「淡く」が曖昧ですが、白飛ばしっぽくすることですか ?
各ピクセル値をいじるなら、RGBじゃなくてHSVのS(彩度)をいじった方がいいかもしれませんね。 白との合成で、形を抽出するには、画像演算をします。 Javaでこういうことを高速に処理してくれるライブラリがあるといいのですが、ないならばゴリゴリと書くしかないかもしれません。 (1) 白一面画像(四角) AND 画像(四角じゃない) = 白画像(四角じゃない) (2) (1) OR 画像 = 白っぽくなった画像 (四角じゃない) (3) 背景 + (2) = 望む処理 ? | ||||
|
投稿日時: 2006-11-13 15:57
2D全盛時代にグラフィックやった人間なら割と常識っぽい処理ですが あまりJavaで2Dごりごりやるって話は聞かないからアプローチが 間違っているのかなぁと思って静観していました。 グラフィックのアルゴリズムを学ぶなら http://www.amazon.co.jp/gp/product/479800958X あたりが入門書としては手ごろかなぁ。 C++なのでアルゴリズムの参考といったところですが。 | ||||
|
投稿日時: 2006-11-15 01:04
みなさん、どうもありがとうございました。
無事に解決することができました。 |