Как отрендерить пнг файл в меню?

desolver.dev
Участник
Статус
Оффлайн
Регистрация
21 Май 2017
Сообщения
465
Реакции[?]
397
Поинты[?]
1K
Хочу сделать как было раньше в миднайте,при открытии меню,задний фон затемнялся(уже сделал), и появлялась картинка(в моём случае это пнг файл)
 
Участник
Статус
Оффлайн
Регистрация
30 Май 2017
Сообщения
670
Реакции[?]
155
Поинты[?]
0
desolver.dev
Участник
Статус
Оффлайн
Регистрация
21 Май 2017
Сообщения
465
Реакции[?]
397
Поинты[?]
1K
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Код:
#include "cSprite.h"



cSprite::~cSprite()
{
    Release();
}
cSprite::cSprite(IDirect3DDevice9* m_pD3Ddev, HMODULE hModule, LPCSTR szResource, LPCSTR szType )
{
    ZeroMemory( this, sizeof(cSprite) );
    ZeroMemory( &pInfo, sizeof(D3DXIMAGE_INFO) );
    this->m_pD3Ddev = m_pD3Ddev;
    this->hModule = hModule;
    if(FAILED(D3DXCreateSprite( m_pD3Ddev, &pSprite ) ) )
        MessageBox( NULL, "Cannot create image sprite", "Error", MB_ICONERROR );
    HRSRC hResourceHandle = FindResource( hModule, szResource, szType );
    if(!hResourceHandle)
        MessageBox( NULL, "Cannot get resource", "Error", MB_ICONERROR );
    HGLOBAL hResource  = LoadResource( hModule, hResourceHandle );
    DWORD   dwSize     = SizeofResource( hModule, hResourceHandle );
    LPVOID  lpResource = LockResource( hResource );
    if(FAILED(D3DXGetImageInfoFromFileInMemory( lpResource, dwSize, &pInfo )) )
        MessageBox( NULL, "Cannot get image info", "Error", MB_ICONERROR );
    if(FAILED(D3DXCreateTextureFromFileInMemoryEx( m_pD3Ddev, lpResource, dwSize,
        pInfo.Width, pInfo.Height, pInfo.MipLevels, NULL, pInfo.Format, D3DPOOL_MANAGED,
        D3DX_DEFAULT, NULL, NULL, NULL, NULL, &pTexture ) ) )
        MessageBox( NULL, "Cannot create texture", "Error", MB_ICONERROR );
    UnlockResource(hResource);
}
cSprite::cSprite(IDirect3DDevice9* m_pD3Ddev, LPCSTR szFilePath )
{
    ZeroMemory( this, sizeof(cSprite) );
    ZeroMemory( &pInfo, sizeof(D3DXIMAGE_INFO) );
    this->m_pD3Ddev = m_pD3Ddev;
    if(FAILED(D3DXCreateSprite( m_pD3Ddev, &pSprite ) ) )
        MessageBox( NULL, "Cannot create image sprite", "Error", MB_ICONERROR );

    if(FAILED(D3DXGetImageInfoFromFile( szFilePath, &pInfo ) ) )
        MessageBox( NULL, "Cannot get image info", "Error", MB_ICONERROR );
    if(FAILED(D3DXCreateTextureFromFileEx( m_pD3Ddev, szFilePath, pInfo.Width, pInfo.Height,
        pInfo.MipLevels, NULL, pInfo.Format, D3DPOOL_MANAGED, D3DX_DEFAULT, NULL, NULL,
        NULL, NULL, &pTexture )) )
        MessageBox( NULL, "Cannot create image texture", "Error", MB_ICONERROR );

}
HRESULT cSprite::Begin()
{
    return pSprite->Begin( D3DXSPRITE_SORT_TEXTURE );
}
HRESULT cSprite::End()
{
    return pSprite->End();
}
HRESULT cSprite::Draw( FLOAT PosX, FLOAT PosY, INT Trans )
{
    D3DXVECTOR3 vPos = D3DXVECTOR3( PosX, PosY, 0.0f );
    return pSprite->Draw( pTexture, NULL, NULL, &vPos,
        D3DCOLOR_ARGB( Trans, 255, 255, 255 ) );
}
HRESULT cSprite::Draw( FLOAT PosX, FLOAT PosY )
{
    return Draw( PosX, PosY, 255 );
}
HRESULT cSprite::OnLostDevice()
{
    return pSprite->OnLostDevice();
}
HRESULT cSprite::OnResetDevice()
{
    return pSprite->OnResetDevice();
}
VOID    cSprite::Release()
{
    SAFE_RELEASE(pSprite);
    SAFE_RELEASE(pTexture);
}

Код:
#pragma once




#include <windows.h>
#include <d3dx9.h>


class cSprite
{

public:
    ~cSprite();

    cSprite(IDirect3DDevice9* m_pD3Ddev);

    cSprite(IDirect3DDevice9* m_pD3Ddev,HMODULE hModule,LPCSTR szResource,LPCSTR szType);
    cSprite(IDirect3DDevice9* m_pD3Ddev,LPCSTR szFilePath);
    

    HRESULT Draw(FLOAT PosX,FLOAT PosY,INT Trans);
    HRESULT Draw(FLOAT PosX,FLOAT PosY);
    HRESULT Begin();
    HRESULT End();
    HRESULT OnLostDevice();
    HRESULT OnResetDevice();

    VOID Release();

    LPDIRECT3DDEVICE9  GetDevice()    { return m_pD3Ddev; }
    LPD3DXSPRITE       GetSprite()    { return pSprite; }
    LPDIRECT3DTEXTURE9 GetTexture()   { return pTexture;}
    D3DXIMAGE_INFO     GetImageInfo() { return pInfo;   }

private:
    IDirect3DDevice9* m_pD3Ddev;
    LPD3DXSPRITE       pSprite;
    LPDIRECT3DTEXTURE9 pTexture;
    D3DXIMAGE_INFO     pInfo;
    HMODULE hModule;
};

#define SAFE_RELEASE(p) { if ( (p) ){ (p)->Release();(p) = 0; }}
#define SAFE_DELETE(a) if( (a) != NULL )delete (a); (a) = NULL;



Код:
cSprite *Image;
......


Image = new cSprite( pDevice,"C://Test.png");

.......

if(FAILED(Image->Begin()))
             GetLastError();
    else
    {
        Image->Draw(Положение_по_оси_Х,Положение_по_оси_Y, 150);
        if(FAILED(Image->End()))
             GetLastError();
    }

разбирайся))) по идеи тебе отсюда нужны всего 10 строк
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,650
Реакции[?]
2,172
Поинты[?]
161K
desolver.dev
Участник
Статус
Оффлайн
Регистрация
21 Май 2017
Сообщения
465
Реакции[?]
397
Поинты[?]
1K
Код:
#include "cSprite.h"



cSprite::~cSprite()
{
    Release();
}
cSprite::cSprite(IDirect3DDevice9* m_pD3Ddev, HMODULE hModule, LPCSTR szResource, LPCSTR szType )
{
    ZeroMemory( this, sizeof(cSprite) );
    ZeroMemory( &pInfo, sizeof(D3DXIMAGE_INFO) );
    this->m_pD3Ddev = m_pD3Ddev;
    this->hModule = hModule;
    if(FAILED(D3DXCreateSprite( m_pD3Ddev, &pSprite ) ) )
        MessageBox( NULL, "Cannot create image sprite", "Error", MB_ICONERROR );
    HRSRC hResourceHandle = FindResource( hModule, szResource, szType );
    if(!hResourceHandle)
        MessageBox( NULL, "Cannot get resource", "Error", MB_ICONERROR );
    HGLOBAL hResource  = LoadResource( hModule, hResourceHandle );
    DWORD   dwSize     = SizeofResource( hModule, hResourceHandle );
    LPVOID  lpResource = LockResource( hResource );
    if(FAILED(D3DXGetImageInfoFromFileInMemory( lpResource, dwSize, &pInfo )) )
        MessageBox( NULL, "Cannot get image info", "Error", MB_ICONERROR );
    if(FAILED(D3DXCreateTextureFromFileInMemoryEx( m_pD3Ddev, lpResource, dwSize,
        pInfo.Width, pInfo.Height, pInfo.MipLevels, NULL, pInfo.Format, D3DPOOL_MANAGED,
        D3DX_DEFAULT, NULL, NULL, NULL, NULL, &pTexture ) ) )
        MessageBox( NULL, "Cannot create texture", "Error", MB_ICONERROR );
    UnlockResource(hResource);
}
cSprite::cSprite(IDirect3DDevice9* m_pD3Ddev, LPCSTR szFilePath )
{
    ZeroMemory( this, sizeof(cSprite) );
    ZeroMemory( &pInfo, sizeof(D3DXIMAGE_INFO) );
    this->m_pD3Ddev = m_pD3Ddev;
    if(FAILED(D3DXCreateSprite( m_pD3Ddev, &pSprite ) ) )
        MessageBox( NULL, "Cannot create image sprite", "Error", MB_ICONERROR );

    if(FAILED(D3DXGetImageInfoFromFile( szFilePath, &pInfo ) ) )
        MessageBox( NULL, "Cannot get image info", "Error", MB_ICONERROR );
    if(FAILED(D3DXCreateTextureFromFileEx( m_pD3Ddev, szFilePath, pInfo.Width, pInfo.Height,
        pInfo.MipLevels, NULL, pInfo.Format, D3DPOOL_MANAGED, D3DX_DEFAULT, NULL, NULL,
        NULL, NULL, &pTexture )) )
        MessageBox( NULL, "Cannot create image texture", "Error", MB_ICONERROR );

}
HRESULT cSprite::Begin()
{
    return pSprite->Begin( D3DXSPRITE_SORT_TEXTURE );
}
HRESULT cSprite::End()
{
    return pSprite->End();
}
HRESULT cSprite::Draw( FLOAT PosX, FLOAT PosY, INT Trans )
{
    D3DXVECTOR3 vPos = D3DXVECTOR3( PosX, PosY, 0.0f );
    return pSprite->Draw( pTexture, NULL, NULL, &vPos,
        D3DCOLOR_ARGB( Trans, 255, 255, 255 ) );
}
HRESULT cSprite::Draw( FLOAT PosX, FLOAT PosY )
{
    return Draw( PosX, PosY, 255 );
}
HRESULT cSprite::OnLostDevice()
{
    return pSprite->OnLostDevice();
}
HRESULT cSprite::OnResetDevice()
{
    return pSprite->OnResetDevice();
}
VOID    cSprite::Release()
{
    SAFE_RELEASE(pSprite);
    SAFE_RELEASE(pTexture);
}

Код:
#pragma once




#include <windows.h>
#include <d3dx9.h>


class cSprite
{

public:
    ~cSprite();

    cSprite(IDirect3DDevice9* m_pD3Ddev);

    cSprite(IDirect3DDevice9* m_pD3Ddev,HMODULE hModule,LPCSTR szResource,LPCSTR szType);
    cSprite(IDirect3DDevice9* m_pD3Ddev,LPCSTR szFilePath);
   

    HRESULT Draw(FLOAT PosX,FLOAT PosY,INT Trans);
    HRESULT Draw(FLOAT PosX,FLOAT PosY);
    HRESULT Begin();
    HRESULT End();
    HRESULT OnLostDevice();
    HRESULT OnResetDevice();

    VOID Release();

    LPDIRECT3DDEVICE9  GetDevice()    { return m_pD3Ddev; }
    LPD3DXSPRITE       GetSprite()    { return pSprite; }
    LPDIRECT3DTEXTURE9 GetTexture()   { return pTexture;}
    D3DXIMAGE_INFO     GetImageInfo() { return pInfo;   }

private:
    IDirect3DDevice9* m_pD3Ddev;
    LPD3DXSPRITE       pSprite;
    LPDIRECT3DTEXTURE9 pTexture;
    D3DXIMAGE_INFO     pInfo;
    HMODULE hModule;
};

#define SAFE_RELEASE(p) { if ( (p) ){ (p)->Release();(p) = 0; }}
#define SAFE_DELETE(a) if( (a) != NULL )delete (a); (a) = NULL;



Код:
cSprite *Image;
......


Image = new cSprite( pDevice,"C://Test.png");

.......

if(FAILED(Image->Begin()))
             GetLastError();
    else
    {
        Image->Draw(Положение_по_оси_Х,Положение_по_оси_Y, 150);
        if(FAILED(Image->End()))
             GetLastError();
    }

разбирайся))) по идеи тебе отсюда нужны всего 10 строк
Появился новый вопрос,как перевести пнг в массив байтов?
 
Сверху Снизу