游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: kav135766

[求助]透明色问题

[复制链接]

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2006-8-21 20:21:00 | 显示全部楼层

Re: Re:[求助]透明色问题

sandy_zc_1: Re:[求助]透明色问题

看来楼主用的是Dx7吧。

如果想知道某一个点的颜色的话,那么把那个表面Lock,
之后GetLockedArray ,就...


麻烦能否说的详细些呢?是要求图片32位还是显示模式是32位?那个函数(方法?过程?)能否取得DDCOLORKEY类型的值?

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2006-8-21 20:24:00 | 显示全部楼层

Re: Re:[求助]透明色问题

liiir1985: Re:[求助]透明色问题

用RGB函数就可以得到颜色 的integer值:
dim aa as integer=RGB(32,12,56)


主要是DDCOLORKEY类型,不过你的方法我试过了,无论将rgb(,,)的值给key.low还是key.high都不行

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2006-8-21 20:28:00 | 显示全部楼层

Re: Re:[求助]透明色问题

gpra8764: Re:[求助]透明色问题

16位色详细原理解释

记得以前有人问过16位色模式下设置关键色的问题,当时我也不清楚,想要知道。经过努...


非常感谢,但是唯独没有处理32位图片的 T_T

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 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

20

主题

451

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2006-8-21 22:44:00 | 显示全部楼层

Re:[求助]透明色问题

原来你是用的vb.net。那个那个key.low或者high要求什么数据类型?

20

主题

451

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2006-8-21 22:48:00 | 显示全部楼层

Re:[求助]透明色问题

原来你是用的vb.net。那个那个key.low或者high要求什么数据类型?

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-8-22 00:28:00 | 显示全部楼层

Re:[求助]透明色问题

专业灌水。
友情一顶。

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2006-8-22 21:09:00 | 显示全部楼层

Re: Re:[求助]透明色问题

liiir1985: Re:[求助]透明色问题

原来你是用的vb.net。那个那个key.low或者high要求什么数据类型?



key是要DDCOLORKEY类型

20

主题

451

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2006-8-23 13:40:00 | 显示全部楼层

Re:[求助]透明色问题

我不是问你key是什么类型,而是key.low和key.high是什么类型

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2006-9-1 00:30:00 | 显示全部楼层

Re:[求助]透明色问题

要求肯定是long型啊,但是要看你的游戏设置的DisplayMode来确定应该赋予16位色还是32位色甚至256色,RGB()函数获得的是24位色绝对是不可以的,你到底有没有看我说的话啊?有空+我QQ聊聊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 05:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表