2016-09-11 20 views
-2

私はvb6.0でスプラッシュスクリーンを作っています。私はフォームを透明にすることができましたが、今ではpngイメージをフォームの背景画像、私はスプラッシュ画面の適切な外観を取得します。私はvb6.0でフォームの背景として.pngイメージを使用したい

+0

問題点は何ですか? PNGファイルを背景として使用することはできません。そうでないと、PNGは透過的になりません。 JPEG? – GSerg

+0

背景として.pngを使用できません。@GSerg –

+0

png形式は直接サポートされていません。あなたはいくつかの選択肢があります:1. PNGをjpgに変換します。 2. vb6 PNGの読み込み画像のGoogle検索を行います。 3. vb.netなどの最新のプログラミング言語に更新します。 –

答えて

1

"スプラッシュスクリーン"はWindows 3.1でスタイルが崩れてしまい、まもなく深刻なソフトウェアではほとんど消えました。しかし、このようなことはほとんど問題なく行うことができます。

このスプラッシュ画面にPNGが透明な場所、たとえば不規則な画像として表示したい境界線のあるフォームなど、「穴がある」ように思えます。あなたは、背景のクロマキーの色の上にPNG画像をレンダリングする必要があります。

しかし、OLE/ActiveXには透明なPNGレンダリングのサポートがないため、VBではこれを直接行う方法はありません。あなたのオプションには、GDI + Flat APIやWIA 2.0などのGDI +ラッパーライブラリなどがあります。 WIA 2.0は非常に長い間Windowsの一部となっています。これはVista以降に出荷され、かつてはWindows XP SP1以降用の再配布可能ライブラリとして利用できました。

ここには、かなり短いWIA 2.0を使用した簡単な例があります。あなたはあなたにもそれを行うことができ、リソースからPNGをロードする場合

Option Explicit 

Private Declare Function GetWindowLong Lib "user32" _ 
    Alias "GetWindowLongW" (_ 
    ByVal hWnd As Long, _ 
    ByVal nIndex As Long) As Long 
Private Declare Function SetWindowLong Lib "user32" _ 
    Alias "SetWindowLongW" (_ 
    ByVal hWnd As Long, _ 
    ByVal nIndex As Long, _ 
    ByVal dwNewLong As Long) As Long 
Private Declare Function SetLayeredWindowAttributes Lib "user32" (_ 
    ByVal hWnd As Long, _ 
    ByVal crKey As Long, _ 
    ByVal bAlpha As Byte, _ 
    ByVal dwFlags As Long) As Long 
Private Const GWL_EXSTYLE = -20 
Private Const WS_EX_LAYERED = &H80000 
Private Const LWA_COLORKEY = &H1& 

Private Sub Form_Load() 
    Dim W As Long 
    Dim H As Long 
    Dim ScanWidth As Long 
    Dim Backdrop() As Byte 
    Dim Y As Long 
    Dim X As Long 
    Dim BackImgF As WIA.ImageFile 

    'Set the Form "transparent by color." 
    SetWindowLong hWnd, _ 
        GWL_EXSTYLE, _ 
        GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED 
    SetLayeredWindowAttributes hWnd, RGB(0, 0, 1), 0, LWA_COLORKEY 

    'Render PNG image into the Form with transparency. 
    W = ScaleX(ScaleWidth, ScaleMode, vbPixels) 
    H = ScaleY(ScaleHeight, ScaleMode, vbPixels) 
    ScanWidth = ((3 * W + 3) \ 4) * 4 
    ReDim Backdrop(ScanWidth * H - 1) 
    For Y = 0 To H - 1 
     For X = 0 To W - 1 
      Backdrop(ScanWidth * Y + 3 * X) = 1 'RGB(0, 0, 1) 
     Next 
    Next 
    With New WIA.Vector 
     .BinaryData = Backdrop 
     Set BackImgF = .ImageFile(W, H) 
    End With 
    With New WIA.ImageProcess 
     .Filters.Add .FilterInfos!Stamp.FilterID 
     With .Filters(1).Properties 
      Set !ImageFile.Value = New WIA.ImageFile 
      !ImageFile.Value.LoadFile "bg.png" 'Background PNG. 
     End With 
     Set Picture = .Apply(BackImgF).FileData.Picture 
    End With 
End Sub 

:それはプロジェクトがMicrosoft Windows Image Acquisition Library 2.0セットへの参照を持っていると想定しています。

Win2KまたはWinXP、またはWinXP SP1以降をサポートする必要があるが、Redist WIA 2.0ライブラリを展開しない場合は、サードパーティのGDI +ラッパーが必要です。それ以外の場合は、GDI +フラットAPI呼び出しを使用できます。それも完璧に実行可能ですが、より多くの仕事。

0

私は長年にわたってLaVolpeのAlphaImageControlを使用していましたが、PNG /ラスターイメージをサポートしています。ファイルとサンプルアプリケーションをダウンロードするときは、Windows 7以降を使用している場合は、regsvr32を使用して手動でコントロールを登録する必要があります。その後、コンポーネントリストのコントロールへの参照を渡す必要があり、voilaではvb6の魔法を使うコントロールがあります。ファイルはvbForumsにあります。HERE

関連する問題