|
HANDLE hFile;
hFile = CreateFile(file,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dwReads;
BITMAPINFO info;
BITMAPFILEHEADER bmfh;
ReadFile(hFile,&bmfh,sizeof(BITMAPFILEHEADER),&dwReads,NULL);
if(bmfh.bfType != 0x4d42)
{
MessageBox(0,"??????","",0);
return false;
}
ReadFile(hFile,&info.bmiHeader,sizeof(BITMAPINFOHEADER),&dwReads,NULL);
if(info.bmiHeader.biBitCount != 16)
{
MessageBox(0,"!=16","",0);
return false;
}
int m=2;
int size = info.bmiHeader.biWidth*info.bmiHeader.biHeight*m; //????
char *pbuf =new char[size]; //????
SetFilePointer(hFile,0,NULL,bmfh.bfOffBits); //???????????????
ReadFile(hFile,pbuf,size,&dwReads,NULL); //???????pbuf;
CloseHandle(hFile);
char *pch;
info.bmiColors[0].rgbRed = (BYTE)0xF800; //????
info.bmiColors[0].rgbBlue = (BYTE)0x001F; //????
info.bmiColors[0].rgbGreen = (BYTE)0x07E0; //????
info.bmiColors[0].rgbReserved = 0;
if(m_D3D9Device->CreateTexture(info.bmiHeader.biWidth,info.bmiHeader.biHeight,1,0,D3DFMT_R5G6B5,D3DPOOL_MANAGED,&m_D3D9Texture,0)==D3D_OK)
{
D3DLOCKED_RECT stLockedRect;
m_D3D9Texture->LockRect(0,&stLockedRect,0,0);
pch = (char*) stLockedRect.pBits;
for( int i=info.bmiHeader.biHeight-1;i>=0;i--)
{
for(int j=0;j<info.bmiHeader.biWidth;j++)
{
pch[0]=pbuf[i*info.bmiHeader.biWidth*m+j*m]; //& 0xf800;// 1 & 0xf800; // & 0xf800
pch[1]=pbuf[i*info.bmiHeader.biWidth*m+j*m+1] ;// & 0x07e0; // & 0x07e0
pch[2]=pbuf[i*info.bmiHeader.biWidth*m+j*m+2]; // & 0x001f; //& 0x001f; //& 0x001f
pch+=2;
}
}
m_D3D9Texture->UnlockRect(0);
delete pbuf;
}
HRESULT result=D3DXCreateSprite(m_D3D9Device,&(m_D3D9Sprite)); //??????
?? m_D3D9Sprite ?????... |
|