HBITMAP CImage::loadImgFile( CString &sFName)
{
int n_start=0,n_end=0;
GetPos(n_start,n_end,strFileName);
CString filename(L"test.jpg");//文件名
FILE* file = fopen(filename,"rb");
//获取文件长度
DWORD filelen =n_end-n_start;//m_file.GetLength()
CString str=L"^-^";
str.Format(L"%d",m_filelen);
//分配空间
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,filelen);
LPVOID pvdata = NULL;
//锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);
//将文件数据读区到堆中
m_file.Read(pvdata,m_filelen);
fread(pvdata, filelen, 1, file);
IStream* m_stream;
GlobalUnlock(m_hglobal);
//在堆中创建流对象
CreateStreamOnHGlobal(hglobal,TRUE,&m_stream);
CoInitializeEx(NULL,COINIT_MULTITHREADED);
IImagingFactory *pImgFactory =NULL;
IImage *pImage =NULL;
HBITMAP hResult =0;
if (SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void **)&pImgFactory)))
{
ImageInfo imageInfo;
//直接将流数据传进去
if(SUCCEEDED(pImgFactory->CreateImageFromStream(m_stream,&pImage))
// if(SUCCEEDED(pImgFactory->CreateImageFromFile(strFileName,&pImage))
&& SUCCEEDED(pImage->GetImageInfo(&imageInfo)))
{
CWindowDC dc(0);
CDC dcBitmap;
dcBitmap.CreateCompatibleDC(&dc);
hResult =CreateCompatibleBitmap(dc.GetSafeHdc(),imageInfo.Width,imageInfo.Height);
if(hResult){
HGDIOBJ hOldBitmap = dcBitmap.SelectObject(hResult);
pImage->Draw(dcBitmap.GetSafeHdc(),CRect(0,0,imageInfo.Width,imageInfo.Height),NULL);
dcBitmap.SelectObject(hOldBitmap);
}
pImage->Release();
}
pImgFactory->Release();
}
CoUninitialize();
return hResult;
}