|
HANDLE hFile;
hFile = CreateFile(file,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dwReads;
BITMAPINFOHEADER bmih;
BITMAPFILEHEADER bmfh;
ReadFile(hFile,&bmfh,sizeof(BITMAPFILEHEADER),&dwReads,NULL);
if(bmfh.bfType != 0x4d42)
{
MessageBox(0,"不是位图文件","",0);
return false;
}
ReadFile(hFile,&bmih,sizeof(BITMAPINFOHEADER),&dwReads,NULL);
if(bmih.biBitCount != 16)
{
MessageBox(0,"!=16","",0);
return false;
}
int m=2;
int size = bmih.biWidth*bmih.biHeight*m; //位图大小
char *pbuf =new char[size]; //位图信息
SetFilePointer(hFile,0,NULL,bmfh.bfOffBits); //将文件指针指向当前位图信息位置
ReadFile(hFile,pbuf,size,&dwReads,NULL); //读取位图信息到pbuf;
CloseHandle(hFile);
char *pch;
if(m_D3D9Device->CreateTexture(bmih.biWidth,bmih.biHeight,1,0,D3DFMT_A1R5G5B5,D3DPOOL_MANAGED,&m_D3D9Texture,0)==D3D_OK)
{
D3DLOCKED_RECT stLockedRect;
m_D3D9Texture->LockRect(0,&stLockedRect,0,0);
pch = (char*) stLockedRect.pBits;
for( int i=bmih.biHeight-1;i>=0;i--)
{
for(int j=0;j<bmih.biWidth;j++)
{
pch[0]=pbuf[i*bmih.biWidth*m+j*m+0] ;// 1 & 0xf800; // & 0xf800
pch[1]=pbuf[i*bmih.biWidth*m+j*m+1] ;// & 0x07e0; // & 0x07e0
pch[2]=pbuf[i*bmih.biWidth*m+j*m+2] ;//& 0x001f; //& 0x001f
pch+=2;
}
}
m_D3D9Texture->UnlockRect(0);
delete pbuf;
}
HRESULT result=D3DXCreateSprite(m_D3D9Device,&(m_D3D9Sprite)); //创建精灵对象
颜色总是不正常,如何处理,请各位大虾指导指导.谢谢了.
[img] [/img] |
|