Хочу сделать как было раньше в миднайте,при открытии меню,задний фон затемнялся(уже сделал), и появлялась картинка(в моём случае это пнг файл)
Вопрос был не в том как в байты перевести,а как их отрендерить.Пожалуйста, авторизуйтесь для просмотра ссылки.
#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();
}
хах чмошка, создай текстуру из этих байтов. и отрендери ееВопрос был не в том как в байты перевести,а как их отрендерить.
Появился новый вопрос,как перевести пнг в массив байтов?Код:#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 строк
https://yougame.biz/threads/24775/Появился новый вопрос,как перевести пнг в массив байтов?
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz