[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/01/30(Mon) 16:13
投稿者名:gt
URL :
タイトル:
多角形透過
はじめまして、gtです。

多角形を作成しています、色も塗り潰しています。
その多角形を透過したいのですが、やり方がわかりませんでした。
教えていただきませんでしょうか。

環境:VB6.0 Win2000

よろしくお願いします。

投稿時間:2006/01/30(Mon) 16:18
投稿者名:gt
URL :
タイトル:
Re: 多角形透過
> はじめまして、gtです。
>
> 多角形を作成しています、色も塗り潰しています。
> その多角形を透過したいのですが、やり方がわかりませんでした。
> 教えていただきませんでしょうか。
>
> 環境:VB6.0 Win2000
>
> よろしくお願いします。
補足:
図形の多角形です。
API関数 Polygon を使っています。

Polygon Picture2.hdc, mPointArray(0), P_conut2

投稿時間:2006/01/30(Mon) 16:58
投稿者名:ダンボ
URL :
タイトル:
Re^2: 多角形透過
過去ログ「VBで半透明ブラシ - はま 01/10-10:06 No.5391 」を参照のこと
・・・って答えでいいのかな?

投稿時間:2006/01/31(Tue) 08:12
投稿者名:gt
URL :
タイトル:
Re^3: 多角形透過
ご返事ありがとう。

その発言を見たのですが,問題の解決方法が不明になっています。

>TransparentBltやAlphaBlendを調べると良いと思います。(WindowsXPでないと使えないが)
>「半透明に」と言うならばAlphaBlendを、
>「透過的に」と言うならばTransparentBltを。
今使っているOSはWin2000ですが、その関数を利用できないですね。

>ですから、Region、PathなどとAlphaBlendを組み合わせて、
>実装することになるのでは。
どういう組み合わせるのでしょうか。

図形の場合、C、C++の場合
SetROP2( R2_MASKPEN );    
で透過していますがその関数はVB上でどう使うか
わかりませんでした。

よろしくお願い致します。

投稿時間:2006/01/31(Tue) 10:14
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: 多角形透過
> >TransparentBltやAlphaBlendを調べると良いと思います。(WindowsXPでないと使えないが)
> >「半透明に」と言うならばAlphaBlendを、
> >「透過的に」と言うならばTransparentBltを。
> 今使っているOSはWin2000ですが、その関数を利用できないですね。

試されたのでしょうか? Win98 以降なら使用できるはずですが?

hhttp://tinyurl.com/9g2kc

hhttp://tinyurl.com/d8t63

hhttp://tinyurl.com/74f6r

投稿時間:2006/01/31(Tue) 10:31
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: 多角形透過
R2_MASKPENですむケースであるのならば、それでやってみては。

もし交差のない図形ならば、単純にPolylineで済むでしょうし。

無駄になる可能性が高いけれどもGDIでの正統な方法としては、
BeginPathでパスブラケットを開いて、そこに図形を描画し、
PathToRegionでRegionを生成、そのRegionをSelectObjectして
あとは普通に塗りつぶす、という流れになるでしょう。

って、多角形のRegionを作るのであれば、いきなりCreatePolygonRgn
を使うほうが簡単でしょうね。

ですから、
CreateRectRgn、CreatePolygonRgn、CombineRgn、SelectObject
と使っていき、あとは普通の操作になるでしょう。

投稿時間:2006/02/01(Wed) 16:15
投稿者名:gt
URL :
タイトル:
Re^2: 多角形透過
花ちゃんさん, K.J.Kさん
ご返事ありがとう。

> >TransparentBltやAlphaBlendを調べると良いと思います。(WindowsXPでないと使えないが)
>試されたのでしょうか? Win98 以降なら使用できるはずですが?

画像データの場合TransparentBltやAlphaBlendを使えるのですね。
ありがとう。その辺これからやろうと思っています。

>ですから、
>CreateRectRgn、CreatePolygonRgn、CombineRgn、SelectObject
>と使っていき、あとは普通の操作になるでしょう。

リジュンを作成して、色を塗り潰してからそのリジュンを透過したいのですが、
詳細に説明していただきませんでしょうか。

よろしくお願いします.

投稿時間:2006/02/01(Wed) 17:35
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: 多角形透過
> リジュンを作成して、色を塗り潰してからそのリジュンを透過したいのですが、
> 詳細に説明していただきませんでしょうか。

詳細がいるとは思えないのですが。
関係ないサンプルならば、API関数の宣言などはAPI Viewerに任せた場合、

    Dim hRegion As Long
    Dim uPoints() As PointAPI
    Dim hRegionOld As Long

    ReDim uPoints(0& To 4&) As PointAPI
    uPoints(0&).x = 48&
    uPoints(0&).y = 33&
    uPoints(1&).x = 63&
    uPoints(1&).y = 43&
    uPoints(2&).x = 53&
    uPoints(2&).y = 63&
    uPoints(3&).x = 43&
    uPoints(3&).y = 63&
    uPoints(4&).x = 33&
    uPoints(4&).y = 43&

    hRegion = CreatePolygonRgn(uPoints(0&), 5&, 2&)
    If 0& <> hRegion Then
        Picture1.AutoRedraw = True
        hRegionOld = SelectObject(Picture1.hDC, hRegion)
        Picture1.Line (32, 32)-(64, 64), vbRed, BF
        Call SelectObject(Picture1.hDC, hRegionOld)
        Call DeleteObject(hRegion)
        Picture1.AutoRedraw = False
    End If

とでもしてみれば、リージョンの性格が掴めるかも知れません。

投稿時間:2006/02/02(Thu) 08:26
投稿者名:gt
URL :
タイトル:
Re^2: 多角形透過
K.J.Kさん

サンプルありがとう。

> とでもしてみれば、リージョンの性格が掴めるかも知れません。
やってみたら、リージョン(赤)を透過していないのです。
ようするに、背景は画像データですが、その上にリージョン(赤)
を作成して、背景も見えるということです。
VBである関数を使って透過できるのでしょうか。
その関数があるでしょうか。
もしなければ、複数のAPI関数で透過するのでしょうね、
その組み合わせの仕方がわかりません。

よろしくお願いします。

投稿時間:2006/02/02(Thu) 09:48
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re^3: 多角形透過
> > とでもしてみれば、リージョンの性格が掴めるかも知れません。
> やってみたら、リージョン(赤)を透過していないのです。

そこからの応用は自分でやらないと面白くないのでは? ということです。
既に提示したAPI関数のCombineRgnで「逆」のリージョンを作る、とか、
既に描画してある画像データからリージョンを使って「切り取る」とか、
そういう方法は考えないのでしょうか?

投稿時間:2006/02/07(Tue) 17:32
投稿者名:gt
URL :
タイトル:
Re^4: 多角形透過
返事遅くになった、すみませんでした。

言ってことはわかっていなかったのです。
一応、Cで作ったのですがうまくできました。

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