您的位置:首页 > 其它

转换一个JPG/GIF格式的图片到BITMAP位图格式.

2006-08-28 11:08 591 查看
说明:在这里写个函数反回一个位图句柄,用法类似于LoadImage函数,指定一个图片的路径就行了.

注意:用完后记得释放.

HANDLE LoadAnImage(LPCTSTR FileName)

{

// Use IPicture stuff to use JPG / GIF files

IPicture* p;

IStream* s;

HGLOBAL hG;

void* pp;

FILE* fp;

if (FileName == NULL || _tcscmp(FileName, "") == 0)

return NULL;

// Read file in memory

fp = fopen(FileName,"rb");

if (!fp)

return NULL;

fseek(fp,0,SEEK_END);

int fs = ftell(fp);

fseek(fp,0,SEEK_SET);

hG = GlobalAlloc(GPTR,fs);

if (!hG)

{

fclose(fp);

return NULL;

}

pp = GlobalLock( hG );

fread(pp,1,fs,fp);

fclose(fp);

GlobalUnlock( hG );

// Create an IStream so IPicture can

CreateStreamOnHGlobal(hG,false,&s);

if (!s)

{

GlobalFree(hG);

return NULL;

}

OleLoadPicture(s,0,false,IID_IPicture,(void**)&p);

if (!p)

{

s->Release();

GlobalFree(hG);

return NULL;

}

s->Release();

GlobalFree(hG);

HANDLE hB = 0;

p->get_Handle((UINT *)&hB);

// Copy the image. Necessary, because upon p's release,

// the handle is destroyed.

HANDLE hBB = CopyImage(hB,IMAGE_BITMAP,0,0,LR_COPYRETURNORG);

p->Release();

// TRACE2("/nFILE: %s, HANDLE: 0x%x/n", FileName, hBB);

return hBB;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: