读取tga格式的图片并试图取得其HBITMAP,但可耻的失败鸟,达人请入
读取tga格式的图片并试图取得其HBITMAP,但可耻的失败鸟,达人请入
我的做法如下:
// 先建一个结构体存放信息头
#pragma pack(push)
#pragma pack(1)
typedef struct TAG_FILE_HEAD_TYP
{
BYTE m_bImageInfo; // 图象信息字段
BYTE m_bColorsetStyle; // 颜色表类型
BYTE m_bImageStyle; // 图象信息码
// 颜色表规格
WORD m_wColorsetFirstAddress; // 颜色表首地址
WORD m_wColorsetSize; // 颜色表长度
BYTE m_bColorsetBit; // 颜色表表项的位(bit)数
WORD m_wPosX; // 图象左下角X坐标的起始位置
WORD m_wPosY; // 图象左下脚Y坐标的起始位置
WORD m_wWidth; // 图象宽度
WORD m_wHeight; // 图象高度
BYTE m_bBitsPerPixel; // 图象每象素占用位数
BYTE m_bImageDescription; // 图象描述符字节
//BYTE* m_pwPixel; // 图象数据区
} TGAFileHead, *TGAFileHeadPtr;
// 。。。
// 取得头部信息之后
HDC hDC = CreateCompatibleDC ( dc ); // dc 是传入的paintdc
LPBYTE pBits;
BITMAPINFO BitInfo;
// 申请内存空间
pBits=(BYTE*) malloc((int)tga->m_wWidth*(int)tga->m_wHeight*(int)(tga->m_bBitsPerPixel >> 3));
memset(&BitInfo,0,sizeof(BITMAPINFO));
BitInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
BitInfo.bmiHeader.biWidth=(int)tga->m_wWidth;
BitInfo.bmiHeader.biHeight=(int)tga->m_wHeight;
BitInfo.bmiHeader.biPlanes=1;
BitInfo.bmiHeader.biBitCount= tga->m_bBitsPerPixel;
BitInfo.bmiHeader.biCompression=0;
_lread(fileHandle, pBits, (int)tga->m_wWidth * (int)tga->m_wHeight * (int)(tga->m_bBitsPerPixel >> 3));
HBITMAP hb;
hb = CreateDIBitmap(hDC, &BitInfo.bmiHeader, CBM_INIT,
pc, &BitInfo, DIB_RGB_COLORS);
DWORD err = GetLastError();
ASSERT(hb);
// 在调试中用*(pBits + n),n是从0开始一个个查看,发现读入的象素点都是正确的,
// 我拿来做试验的tga图片格式信息是02,每个象素点是用4字节表示的,长宽都是64
// 头信息读取和我用ultraedit查看的二进制文件也完全吻合
// 但是贴出来的图是一片黑漆漆
if(hb)
{
HBITMAP OldHBitmapforCell = (HBITMAP)MemDC.SelectObject(hb);
MemDCMain.BitBlt(0, 0,
64, 64,
&MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(OldHBitmapforCell);
}
bow!!!谁能告诉我为什么啊,为什么贴出来的图是全黑的;
取得HBITMAP的方法是不是只有createdibitmap 或者createdibsection,我都试过了啊,还是一样黑
问题点数:0、回复次数:1Top
1 楼Diab1o(菠萝)回复于 2005-02-11 21:56:52 得分 0
hb = CreateDIBitmap(hDC, &BitInfo.bmiHeader, CBM_INIT,
pc, &BitInfo, DIB_RGB_COLORS);
这句的倒数第二个参数应该是pBits吧Top




