マスクで?

解決


マグ  2004-11-01 20:44:03  No: 117300

題名の通りなのですが、
マスク(画像)をVB.NET内で使うにはどうすればよろしいでしょうか?

理由は透明がかかった画像をPictureBoxに表示したいので探しているのですが、
なかなか、見つかりません。

後、その透明は綺麗にグラデーションのかかった透明なので、
VB.NETでマスクを使用する方法を探しています。
知っている方がいるのならば、教えてください。


ふむ  2004-11-02 01:32:05  No: 117301

質問が理解できないのは俺だけでしょうか?
透明が綺麗なグラデーション??
もうちょっと整理して質問していただけると答え安いのですが。

前にもこの手の質問してますよね?
http://madia.world.coocan.jp/vb/vb_bbs2/200408_04080049.html


マグ  2004-11-02 04:03:24  No: 117302

それとは違うのですが・・・・・

現在PictureBoxでProguressBarと同じ動作をするものを作っていました。
メータが進んで満タンになるところまで成功しています。

そして、そのPictureBoxに四角のクリアボディを描画させたいのですが、
どうしてもできません(TT)

色々、試して見たのですが、
そこで、マスク(画像)を使用して、透明にする方法を探しているのですが、
見つからないいんです(TT)

マスクは本来、ゲームに使うものらしいのですが・・・・
私はそういう系統を作ったことがないのでVB.NETで
マスクを使い透明度を設定する方法が分かりません。

どうか、教えてください。


魔界の仮面弁士  2004-11-02 07:31:07  No: 117303

「クリアボディ」など、幾つかの言葉がわからなかったので、
質問の意味をあまり理解できていませんが…最終結果としては、
半透明画像の重ね合わせができれば良いのでしょうか?
あるいは、透過表示させる部分を、マスク画像を使って指定したいとか?

Dim cm As New Imaging.ColorMatrix
cm.Matrix00 = 1.0F
cm.Matrix11 = 1.0F
cm.Matrix22 = 1.0F
cm.Matrix33 = 0.37F
cm.Matrix44 = 1.0F

Dim ia As New Imaging.ImageAttributes
ia.SetColorMatrix(cm)

Dim G As Graphics = PictureBox1.CreateGraphics()

Dim Img1 As Image = Img1.FromFile("C:\A.JPG")
Dim Img2 As Image = Img2.FromFile("C:\B.JPG")

G.DrawImage(Img1, New Point(0, 0))
G.DrawImage( _
    Img2, _
    New Rectangle(0, 0, Img2.Width, Img2.Height), _
    0, 0, Img2.Width, Img2.Height, _
    GraphicsUnit.Pixel, ia _
)

Img1.Dispose()
Img2.Dispose()
G.Dispose()


マグ  2004-11-02 17:55:04  No: 117304

>透過表示させる部分を、マスク画像を使って指定したいとか?

これをVB.NETでやりたいのですが、あちこち探しても見つからないんです。


マグ  2004-11-03 20:28:25  No: 117305

マスク画像を使って透明度を設定する方法がVB.NETには存在しないのでしょうか?

あちこち探して見たのですが、画像にあらかじめマスクを仕込んで
画像を保存して、VB.NETのPictureBoxにDrawImageで呼び出したら、
マスクを読み込んでくれました。
VB.NETではマスクの読み込みも自動で行ってくれる事を始めて知りました。

解決しました。
ありがとうございました。

他に画像とマスク画像をバラバラにして透明度を設定する方法を探しています。
知っている方がいるのならば、教えてください。
お願いします。

マスク画像の使用例はこのようなものなのですが、
URL:http://rispetto.net/yu-ris/index.shtml

のサイトの
キャラクターを表示する

テキストウィンドウを表示する
にマスクについて説明?みたいなものがあります。

これと同じ動作をする関数を探しているのですが、
なかなか見つからずに困っています。

言語が違いますが・・・・・


葉月  2004-11-04 17:46:57  No: 117306

会社のパソコンのためサンプルのDLと実行できないので未確認情報ですが
http://homepage1.nifty.com/rucio/main/technique/teq_13.htm
の6の禁断の技?ってのはどうなんでしょう?


マグ  2004-11-04 19:18:40  No: 117307

以前、ここのサイトで

[3、マスク処理]

というところで、

Option Explicit

Private Const PICTURE_BACK As String = "\T13_Back.Jpg"
Private Const PICTURE_CHARA As String = "\T13_Chara.GIF"
Private Const PICTURE_MASK As String = "\T13_CharaMask.GIF"

Private Sub Command1_Click()

    picMain.Picture = LoadPicture(App.Path & PICTURE_BACK)
    picChara.Picture = LoadPicture(App.Path & PICTURE_CHARA)
    picMask.Picture = LoadPicture(App.Path & PICTURE_MASK)

    Call picMain.PaintPicture(picMask.Picture, 0, 0, , , , , , , vbSrcAnd)
        '↑
    Call picMain.PaintPicture(picChara.Picture, 0, 0, , , , , , , vbSrcInvert)
        '↑

End Sub

のソースをVB.NETに変えようと思ったのですが、
どうしても出来ないんです。

矢印の指している部分で苦戦してしまいます。
どのように変えればよろしいでしょうか?

あと、

6の禁断の技はソースを見た限り
多分、画像を取り込んで、プログラムから透過する色を指定
して、その画像の色で指定した色を透過させていると思います。
でも、これ、私が望んでいる動きをしていません。(TT)


ぴろあき  2004-11-04 20:43:03  No: 117308

>葉月さん
PaintEffectsクラスとかいうのを使用して、
指定色の透明化をするサンプルのようです。

チラ見しただけですが、動作は、
TransparentBlt関数(API)と同じ動作をするだけです。
TransparentBlt(API)の内部コードはこんな感じになるのかな?
っていう感想です。


マグ  2004-11-04 21:59:32  No: 117309

えっ!!

もしかして、

Option Explicit

Private Const PICTURE_BACK As String = "\T13_Back.Jpg"
Private Const PICTURE_CHARA As String = "\T13_Chara.GIF"
Private Const PICTURE_MASK As String = "\T13_CharaMask.GIF"

Private Sub Command1_Click()

    picMain.Picture = LoadPicture(App.Path & PICTURE_BACK)
    picChara.Picture = LoadPicture(App.Path & PICTURE_CHARA)
    picMask.Picture = LoadPicture(App.Path & PICTURE_MASK)

    Call picMain.PaintPicture(picMask.Picture, 0, 0, , , , , , , vbSrcAnd)
        '↑
    Call picMain.PaintPicture(picChara.Picture, 0, 0, , , , , , , vbSrcInvert)
        '↑

End Sub

のソースって、
白から黒の範囲で透過できないのでしょうか?
つまり、白と黒の中間色のグレーならその元画像を半透明にするとかできないのでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加