Adobe FLASHを.net上で表示し、かつ、その背景を透明にする方法を記載します。


実行時の様子

 FLASHをフォームに張り付つけ、かつFLASHの背景ごと透明化しております。
 ファイル 123-1.png
 FLASH(ActionScript)にはAlternativa3Dというライブラリが使用されています。
 Stage3Dでは透明化できないと予測していたのですが、問題なく透明化できるようです。
 もちろん、Stage3Dを使用しない通常の2D FLASHでも透明化できます。

 ちなみにここで採用した方法は、フォームにWebBrowserコントロールを張り付け、
 WebBrowserにFLASHを張り付けるタグを書いて、FLASHをロードして表示しております。

 これ以外の方法(ActiveX:Shockwave Flash Objectを張り付ける方法)においては
 Win32APIを使用するなどあらゆる透明化を試してみたのですが、ことごとく失敗しました。

 また問題点としては、FLASH内の透明部分との境界がシャギります。
 Windows XPだとかなりシャギり、Windows 7だとまぁまぁシャギります。

 ちなみに添付するFLASHのサンプルは、どこかのパクリです。
 引用元を忘れてしまいましたが、問題ありましたらご連絡ください。即座に削除します。

 FLASHの透明化については、世界中のグーグル先生に聞いても教えてくれませんでした。
 本当に苦労しました。これくらいやりたい人がいてもおかしくないのに。

 

実行環境

・Internet Explorer 8
・Adobe Flash Player 11
・Microsoft Visual Studio 2008 Professional(VB.NET)
・.NET Framework 2.0, 3.5
 ※2003/2005でも、C#でも、それ以降でも同じことができます。

 

サンプルコードとサンプルプロジェクト

以下にサンプルコードを記載します。
このサンプルコードを含んだプロジェクトは以下からもダウンロードできます。
サンプルプロジェクトのダウンロード

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
Public Class Form1
    Private m_WebBrowser As WebBrowser
‌ 
    ' ====== 読み込むフラッシュへのパス
    Private m_FlashPath As String = System.IO.Path.Combine( _
                                    System.IO.Path.GetDirectoryName( _
                                    Application.ExecutablePath), "Cubes.swf")
‌ 
    ' ====== 透明化する色
    Private Const E_TRANSPARENCY_KEY As Integer = &H111111
‌ 
    Private Sub Form1_Load(ByVal sender As System.Object, _
                             ByVal e As System.EventArgsHandles MyBase.Load
        '   透明化する色を設定
        Me.TransparencyKey = Color.FromArgb(E_TRANSPARENCY_KEY)
        Me.Opacity = 1.0
‌ 
        ' WebBrowserを生成してフォームに張り付け
        m_WebBrowser = New WebBrowser
        m_WebBrowser.Dock = DockStyle.Fill
        m_WebBrowser.ScrollBarsEnabled = False
        Me.Controls.Add(m_WebBrowser)
‌ 
        ' ========================================================
        '   ブラウザに出力
        ' ========================================================
        With m_WebBrowser
            ' アプリケーション起動直後はドキュメントが存在しないらしいので空白ページを開く
            If .Document Is Nothing Then
                .Navigate("about:blank")
            End If
‌ 
            '  新しくドキュメントを開く
            Dim myHtmlDocument As System.Windows.Forms.HtmlDocument = .Document.OpenNew(True)
            If myHtmlDocument Is Nothing Then Return
‌ 
            '  FLASH貼り付けタグを生成(背景を透明にする、wmode=transparent指定)
            Dim myFlashTags As String = _
                    "<object type=""application/x-shockwave-flash""" + _
                    " width=""100%"" height=""100%"" data=""" + m_FlashPath + """>" + _
                        "<param name=""movie"" value=""" + m_FlashPath + """/>" + _
                        "<param name=""quality"" value=""high""/>" + _
                        "<param name=""wmode"" value=""transparent""/>" + _
                        "<param name=""bgcolor"" value=#""" + _ 
                         E_TRANSPARENCY_KEY.ToString("X") + """ />" + _
                    "</object>"
‌ 
            ' WebBrowserにHTMLを書き出す(ページの背景色をtransparencyKeyと合わせる)
            myHtmlDocument.Write( "<html><body bgcolor=""#" + _ 
                 E_TRANSPARENCY_KEY.ToString("X") + """>" + myFlashTags + "</body></html>")
‌ 
            Application.DoEvents()
        End With
‌ 
        Application.DoEvents()
    End Sub
End Class
このコードは CodePublisher で生成しています

コメント

  • コメントはまだありません。

コメントを投稿する

コメントを投稿する場合は以下に注意してください。

・記事に関係する内容であること
・特別な理由がない限り「全体公開」であること

これさえ守っていただければどんな内容でも投稿可能です。
皆様の質問やコメントは他の方の問題解決に繋がりますのでご協力ください。

コメント投稿フォーム
名前
メール
URL
コメント
閲覧制限

コメントを投稿するには、以下の問題に答えてください。
問題:「電圧÷抵抗の解を漢字二文字で入力してください。」