wince下读取jpg等文件
感觉还是不够细心,没有看IImage 接口的源码,非要到走投无路时才去瞄一下,图形图象确实要细心,总算搞定了,这个周末可以休息下了,看了多普达S1精英版好长时间了,周末去把它买了!谗了我好久了. HBITMAP CImageLoader::loadImageFile( CString &strFileName) { int n_start=0,n_end=0; GetPos(n_start,n_end,strFileName); CString m_filename(L"1.data");//文件名 CFile m_file(m_filename,CFile::modeRead ); m_file.Seek(n_start,CFile::begin); //获取文件长度 DWORD m_filelen =n_end-n_start;//m_file.GetLength() CString str=L"^-^"; str.Format(L"%d",m_filelen); AfxMessageBox(str); //在堆上分配空间 HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen); LPVOID pvdata = NULL; //锁定堆空间,获取指向堆空间的指针 pvdata = GlobalLock(m_hglobal); //将文件数据读区到堆中 m_file.Read(pvdata,m_filelen); IStream* m_stream; GlobalUnlock(m_hglobal); //在堆中创建流对象 CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream); IImagingFactory *pImgFactory =NULL; IImage *pImage =NULL; CoInitializeEx(NULL,COINIT_MULTITHREADED); 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; }
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |