|
|

楼主 |
发表于 2006-8-21 20:30:00
|
显示全部楼层
Re:[求助]透明色问题
我把源码帖了吧,是我从及格帖子里拼成的,也可能是我写的不对:
______________
Imports DxVBLib
Public Class Form1
Dim objDX As New DirectX7
Dim objDD As DirectDraw7
Dim objDDPrimSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2
Dim objDDOffSurf As DirectDrawSurface7
Dim ddsd2 As DDSURFACEDESC2
Dim objDDBackSurf As DirectDrawSurface7
Dim ddsd3 As DDSURFACEDESC2
Dim caps As DDSCAPS2
Public ddsMap As DirectDrawSurface7 '设置地图
Public ddsHero As DirectDrawSurface7 '设置人物
Public str As String = "f:\3.bmp"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Render()
End Sub
Private Sub Render()
objDD = objDX.DirectDrawCreate("")
Call objDD.SetCooperativeLevel(Me.Handle.ToInt32, CONST_DDSCLFLAGS.DDSCL_FULLSCREEN Or CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX Or CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE)
Call objDD.SetDisplayMode(1024, 768, 32, 0, CONST_DDSDMFLAGS.DDSDM_DEFAULT)
ddsd1.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS Or CONST_DDSURFACEDESCFLAGS.DDSD_BACKBUFFERCOUNT
ddsd1.lBackBufferCount = 1
ddsd1.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE Or CONST_DDSURFACECAPSFLAGS.DDSCAPS_FLIP Or CONST_DDSURFACECAPSFLAGS.DDSCAPS_COMPLEX
objDDPrimSurf = objDD.CreateSurface(ddsd1)
caps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_BACKBUFFER
objDDBackSurf = objDDPrimSurf.GetAttachedSurface(caps)
ddsd2.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS Or CONST_DDSURFACEDESCFLAGS.DDSD_HEIGHT Or CONST_DDSURFACEDESCFLAGS.DDSD_WIDTH
ddsd2.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN
ddsd2.lWidth = 1024
ddsd2.lHeight = 768
Dim key As DDCOLORKEY
key.low = 65024 'RGB(0, 0, 0)
key.high = 65024 'RGB(0, 0, 0)
objDDOffSurf = objDD.CreateSurfaceFromFile("f:\1.bmp", ddsd2)
objDDOffSurf.SetColorKey(CONST_DDCKEYFLAGS.DDCKEY_SRCBLT, key)
Dim rmap As RECT
rmap.Top = 0
rmap.Left = 0
rmap.Right = 1024
rmap.Bottom = 768
objDDBackSurf.BltFast(0, 0, objDDOffSurf, rmap, CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT)
ddsd2.lWidth = 31
ddsd2.lHeight = 32
objDDOffSurf = objDD.CreateSurfaceFromFile("f:\3.bmp", ddsd2)
'这里的背景色为黑色
Dim myImage As Bitmap = Bitmap.FromFile(str)
MsgBox(RGB(0, 254, 0)) 'myImage.GetPixel(0, 0).ToString)
'Dim i As Integer
'Dim j As Integer
'Dim k As Integer
'For i = 0 To 255
' For j = 0 To 255
' For k = 0 To 255
' key.high = RGB(i, j, k)
' If key.Equals(myImage.GetPixel(0, 0)) Then key.low = key.high
' Next
' Next
'Next
'key.high = key.low
'Dim StrA As String, R As String, G As String, B As String
'StrA = Strings.Right("00000" & Hex(lColor), 6)
'R = Strings.Right(StrA, 2)
'G = Strings.Mid(StrA, 3, 2)
'B = Strings.Left(StrA, 2)
'key.low = System.Drawing.Color.FromArgb(Val("&HFF" & R & G & B))
'key.high = System.Drawing.Color.FromArgb(Val("&HFF" & R & G & B))
'Dim someColor As Color = Color.Green
objDDOffSurf.SetColorKey(CONST_DDCKEYFLAGS.DDCKEY_SRCBLT, key)
rmap.Top = 0
rmap.Left = 0
rmap.Right = 31
rmap.Bottom = 32
objDDBackSurf.BltFast(0, 0, objDDOffSurf, rmap, CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT)
objDDPrimSurf.Flip(Nothing, CONST_DDFLIPFLAGS.DDFLIP_WAIT)
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
End Sub
End Class |
|