MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!

Participe do fórum, é rápido e fácil

MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!
MMORPG Brasil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[ES/EE/EEB] Utilizando .PNG com DirectX7

+4
Ian
V-Force
Thales12
St4rk
8 participantes

Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por St4rk Seg 27 Fev 2012, 16:07

Antes de iniciar, não me importo se vão achar ruim depois, já guardei isso por um tempo, está na hora de todos ficarem sabendo, não me importo se vão roubar e por créditos de outro, não to nem ai para "meus créditos", fique avontade para usar como você quiser...

Nível: 2/5 - Programação


Nesse tutorial pretendo aborda um pouco sobre como carregar .png no DirectX7, essa maneira já era possível, pois, existe metodos(usando algumas gambiarras) de carregar gráficos indiretamente em uma surface do DirectX7, o nosso futuro Modulo PNG vem de uma famosa engine chamada "FrogCreator"(acho que é isso), nessa engine é possível carregar .png, enfim, o mistério acabo.


1º Abra seu Cliente(src/código de fonte) e crie um novo Modulo, o nomeie de modPNG(para ficar organizado) e copie e cole o seguinte código:


Código:
'************************************************
'*  SurfUtil.bas                                *
'*                                              *
'* By: W-Buffer                                *
'* Web: istudios.virtualave.net/vb/            *
'* Mail: wbuffer@hotmail.com                    *
'*                                              *
'* Modified by: Don Andy (don_andy@gmx.de)      *
'*                                              *
'* Notes: Do whatever you want with this bas    *
'*        (Steal, Copy, Etc.)                  *
'*        These functions were modified to work *
'*        with PNG only and to recieve the DDSD *
'*        The DDSD MUST have a DDSD_HEIGHT and  *
'*        DDSD_WIDTH flag!!                    *
'*        The lib used to display PNGs is the  *
'*        PaintX-Lib (http://www.paintlib.de)  *
'************************************************
Option Explicit

Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Public Declare Function StretchBlt Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long



Public Function LoadPNG(FileName As String, Optional Errore As Boolean) As StdPicture
On Error GoTo er:
    Dim PictureDecoder As New PAINTXLib.PictureDecoder
    Set LoadPNG = PictureDecoder.LoadPicture(FileName)
Exit Function
er:
    If Errore Then MsgBox "Erreur de chargement de " & FileName & vbCrLf & "Verifiez qu'il soit présent."
End Function

Public Function LoadImage(FileName As String, DDraw As DirectDraw7, SDesc As DDSURFACEDESC2) As DirectDrawSurface7
    Dim TPict As StdPicture
    Set TPict = LoadPNG(FileName, True)
   
    SDesc.lHeight = CLng((TPict.Height * 0.001) * 567 / Screen.TwipsPerPixelY)
    SDesc.lWidth = CLng((TPict.Sou lammer =D * 0.001) * 567 / Screen.TwipsPerPixelX)
   
   
    Set LoadImage = DDraw.CreateSurface(SDesc)
   
    Dim SDC As Long, TDC As Long
    SDC = LoadImage.GetDC
    TDC = CreateCompatibleDC(0)
    SelectObject TDC, TPict.handle
   
    BitBlt SDC, 0, 0, SDesc.lWidth, SDesc.lHeight, TDC, 0, 0, vbSrcCopy
       
    LoadImage.ReleaseDC SDC
    DeleteDC TDC
     
    Set TPict = Nothing
End Function

Public Function LoadImageStretch(FileName As String, Height As Long, Sou lammer =D As Long, DDraw As DirectDraw7, SDesc As DDSURFACEDESC2) As DirectDrawSurface7
    Dim TPict As New StdPicture
    Set TPict = LoadPNG(FileName, True)
   
    SDesc.lHeight = Height
    SDesc.lWidth = Sou lammer =D
   
    Set LoadImageStretch = DDraw.CreateSurface(SDesc)
   
    Dim SDC As Long, TDC As Long
    SDC = LoadImageStretch.GetDC
    TDC = CreateCompatibleDC(0)
    SelectObject TDC, TPict.handle
   
    StretchBlt SDC, 0, 0, Sou lammer =D, Height, TDC, 0, 0, CLng((TPict.Sou lammer =D * 0.001) * 567 / Screen.TwipsPerPixelX), CLng((TPict.Height * 0.001) * 567 / Screen.TwipsPerPixelY), vbSrcCopy
   
    LoadImageStretch.ReleaseDC SDC
    DeleteDC TDC
       
    Set TPict = Nothing
End Function


Fazendo isso, lá em cima no Visual Basic 6, na aba "Project", clique em referências(References) e Selecione as seguintes Library:

PaintX 1.0 Type Library
OLE Automation

Fazendo isso, vou demostrar um exemplo de como usar o modPNG.

[ES/EE/EEB] Utilizando .PNG com DirectX7 480944 Exemplo retirado do Eclipse Stable, porém, pode ser usado em outras engines(claro que com modificações).


Código:

    ' Init sprite ddsd type and load the bitmap
    DDSD_Sprite.lFlags = DDSD_CAPS
    DDSD_Sprite.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN Or DDSCAPS_SYSTEMMEMORY
    Set DD_SpriteSurf = DD.CreateSurfaceFromFile(App.Path & "\GFX\Sprites.bmp", DDSD_Sprite)

Para usar o modPNG se modifica a parte dos lFlags, lCaps e "DD.CreateSurfaceFromFile", ficando assim:

Código:

    ' Init sprite ddsd type and load the bitmap
    DDSD_Sprite.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
    DDSD_Sprite.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN Or DDSCAPS_SYSTEMMEMORY
    Set DD_SpriteSurf = LoadImage(App.Path & "\GFX\Sprites.png", DD, DDSD_Sprite)
    SetMaskColorFromPixel DD_SpriteSurf, 0, 0

A parte mais importante é a do "LoadImage", lembre-se que DD é o Objeto do DirectX7, fazendo isso você vai carregar os gráficos em .png


Considerações finais: O modPNG é muito util para os projetos, infelizmente não da para carregar sua transparência ainda(alpha chanel, eu acho que é isso), porém, vou ver se consigo.

Enfim, boa sorte se for usar ele.


St4rk
St4rk
Membro de Honra
Membro de Honra

Mensagens : 2251

http://mylittledev.wordpress.com

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por Thales12 Seg 27 Fev 2012, 16:10

Tio Omega eu ja sabia fazer rodar imagem .png .. Smile
mais mts nao sabem, obrigado por postar, + 2 creditos apra vc ! :0
Thales12
Thales12
Membro Veterano
Membro Veterano

Mensagens : 1011

http://www.rdmgames.tk

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por V-Force Seg 27 Fev 2012, 18:15

Nice, omega postando tutorial uia haushuas... Belo tuto +3 de cred
V-Force
V-Force
Administrador V-Force
Administrador V-Force

Mensagens : 933

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por Ian Ter 28 Fev 2012, 00:28

não sei oque mais improvavel v-force direto no forum kk ou omega fasendo post de tutorial rsrs boa omega
Ian
Ian
Membro Veterano
Membro Veterano

Mensagens : 1238

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por Darkpeople196 Ter 28 Fev 2012, 07:07

kkkk euri /\

enfim eu já sabia disso fikdik... Very Happy

valew Zero,.
Darkpeople196
Darkpeople196
Membro Vitalicio
Membro Vitalicio

Mensagens : 612

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por Yohanson Ter 28 Fev 2012, 09:09

VEJO QUE SÓ TEM PESOS PESADOS NO VB6!!!!!!!!!!

AGRADEÇO DESDE JÁ A SUA INICIATIVA EM POSTAR ALGO TÃO PRECIOSO PARA MUITOS QUE COMO EU, PRECISAM PARA MELHORAR SUAS ENGINES



ASS: TRIPLO-XXXX
Yohanson
Yohanson
Membro
Membro

Mensagens : 153

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por ismael251 Sex 08 Jun 2012, 18:13

Código:
'************************************************
'*  SurfUtil.bas                                *
'*                                              *
'* By: W-Buffer                                *
'* Web: istudios.virtualave.net/vb/            *
'* Mail: wbuffer@hotmail.com                    *
'*                                              *
'* Modified by: Don Andy (don_andy@gmx.de)      *
'*                                              *
'* Notes: Do whatever you want with this bas    *
'*        (Steal, Copy, Etc.)                  *
'*        These functions were modified to work *
'*        with PNG only and to recieve the DDSD *
'*        The DDSD MUST have a DDSD_HEIGHT and  *
'*        DDSD_WIDTH flag!!                    *
'*        The lib used to display PNGs is the  *
'*        PaintX-Lib (http://www.paintlib.de)  *
'************************************************
Option Explicit

Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Public Declare Function StretchBlt Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Public Function LoadPNG(filename As String, Optional Errore As Boolean) As StdPicture
On Error GoTo er:
    Dim PictureDecoder As New PAINTXLib.PictureDecoder
    Set LoadPNG = PictureDecoder.LoadPicture(filename)
Exit Function
er:
    If Errore Then MsgBox "Error al cargar " & filename & vbCrLf & "Compruébelo usted mismo ahora."
End Function

Public Function LoadImage(filename As String, DDraw As DirectDraw7, SDesc As DDSURFACEDESC2) As DirectDrawSurface7
    Dim TPict As StdPicture
    Set TPict = LoadPNG(filename, True)
   
    SDesc.lHeight = CLng((TPict.Height * 0.001) * 567 / Screen.TwipsPerPixelY)
    SDesc.lWidth = CLng((TPict.Width * 0.001) * 567 / Screen.TwipsPerPixelX)
   
   
    Set LoadImage = DDraw.CreateSurface(SDesc)
   
    Dim SDC As Long, TDC As Long
    SDC = LoadImage.GetDC
    TDC = CreateCompatibleDC(0)
    SelectObject TDC, TPict.Handle
   
    BitBlt SDC, 0, 0, SDesc.lWidth, SDesc.lHeight, TDC, 0, 0, vbSrcCopy
       
    LoadImage.ReleaseDC SDC
    DeleteDC TDC
     
    Set TPict = Nothing
End Function

Public Function LoadImageStretch(filename As String, Height As Long, Width As Long, DDraw As DirectDraw7, SDesc As DDSURFACEDESC2) As DirectDrawSurface7
    Dim TPict As New StdPicture
    Set TPict = LoadPNG(filename, True)
   
    SDesc.lHeight = Height
    SDesc.lWidth = Width
   
    Set LoadImageStretch = DDraw.CreateSurface(SDesc)
   
    Dim SDC As Long, TDC As Long
    SDC = LoadImageStretch.GetDC
    TDC = CreateCompatibleDC(0)
    SelectObject TDC, TPict.Handle
   
    StretchBlt SDC, 0, 0, Width, Height, TDC, 0, 0, CLng((TPict.Width * 0.001) * 567 / Screen.TwipsPerPixelX), CLng((TPict.Height * 0.001) * 567 / Screen.TwipsPerPixelY), vbSrcCopy
   
    LoadImageStretch.ReleaseDC SDC
    DeleteDC TDC
       
    Set TPict = Nothing
End Function

Coloquem isso no modPNG nao usem o que ai cima cito elhe nao da.
ismael251
ismael251
Membro Junior
Membro Junior

Mensagens : 58

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por didigaga10 Qui 14 Jun 2012, 19:50

bom...
didigaga10
didigaga10
Novato
Novato

Mensagens : 41

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por ismael251 Sex 15 Jun 2012, 18:24

Eu estou usando o Eclipse Evolution e nao fica dando alguem pode fazer um tutorial para isso? ou melhor mude o codigo que ai cima e coloque no Eclipse Evolution e dps eu veio e faço toudo aqui!
Quem fazer isso para min dou 3 Creditos! Smile
ismael251
ismael251
Membro Junior
Membro Junior

Mensagens : 58

Ir para o topo Ir para baixo

[ES/EE/EEB] Utilizando .PNG com DirectX7 Empty Re: [ES/EE/EEB] Utilizando .PNG com DirectX7

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos