游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1465|回复: 0

16位位图如何正常取除背景,总是不成功.

[复制链接]

11

主题

16

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2010-6-26 19:24:00 | 显示全部楼层 |阅读模式
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]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 12:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表