|
- /// @brief 加载ZIP图片,指定区位置及大小.
- /// @param pZipFileName ZIP文件.
- /// @param pImageName 图片名称
- /// @param pPassword 密码
- /// @param x 坐标.
- /// @param y 坐标.
- /// @param cx 宽度.
- /// @param cy 高度.
- /// @return 图片句柄.
- XC_API HIMAGE WINAPI XImage_LoadZipRect(wchar_t *pZipFileName,wchar_t *pImageName,wchar_t *pPassword,int x,int y,int cx,int cy)
- {
- char zipfilename[MAX_PATH]={0};
- WideCharToMultiByte(CP_ACP,NULL,pZipFileName,wcslen(pZipFileName),zipfilename,MAX_PATH,NULL,NULL);
- char filename_to_extract[MAX_PATH]={0};
- WideCharToMultiByte(CP_ACP,NULL,pImageName,wcslen(pImageName),filename_to_extract,MAX_PATH,NULL,NULL);
- char password[MAX_PATH]={0};
- if(pPassword)
- WideCharToMultiByte(CP_ACP,NULL,pPassword,wcslen(pPassword),password,MAX_PATH,NULL,NULL);
- //const char *password=NULL;
- //char *zipfilename="C:\\Users\\mengfei\\Desktop\\myzip.zip"; //压缩包
- //char *filename_to_extract="dirtt/123.txt"; //提取文件名
- //char *filename_to_extract="btn.bmp"; //提取文件名
- unzFile zipFile=NULL;
- zipFile = unzOpen64(zipfilename); //打开压缩包
- if (zipFile==NULL)
- {
- return NULL;
- }
- int outSize=0;
- void *data =NULL;
- if(pPassword)
- data=do_extract_onefile(zipFile, filename_to_extract,password,outSize);
- else
- data=do_extract_onefile(zipFile, filename_to_extract,NULL,outSize);
- unzClose(zipFile);
- if(data)
- {
- HGLOBAL hJPG = ::GlobalAlloc(GMEM_MOVEABLE, outSize);
- LPVOID lpJGP = ::GlobalLock(hJPG);
- memcpy(lpJGP, data, outSize);
- ::GlobalUnlock(hJPG);
- LPSTREAM pstm =NULL;
- HRESULT hr =CreateStreamOnHGlobal(hJPG, TRUE, &pstm);
- assert(SUCCEEDED(hr) && pstm);
- Image *pImg=Image::FromStream(pstm);
- pstm->Release();
-
- free(data);
- if(pImg)
- {
- if(Gdiplus::Ok==pImg->GetLastStatus())
- {
- //缓存图片
- Bitmap *pBitmap=new Bitmap(cx,cy);
- //将图片绘制到缓存
- Graphics* imageGraphics = Graphics::FromImage(pBitmap);
- Rect destRect;
- destRect.X=0;
- destRect.Y=0;
- destRect.Width=cx;
- destRect.Height=cy;
- ImageAttributes ImgAtt;
- if(Gdiplus::Ok!=imageGraphics->DrawImage(pImg,
- destRect,
- x, //srcX
- y, //srcY
- cx, //cx
- cy, //cy
- UnitPixel,&ImgAtt,NULL,NULL))
- {
- XTRACE("XImage_LoadFileSize() 错误 \n");
- delete imageGraphics;
- return NULL;
- }
- ximage_ *pXImage=(ximage_*)malloc(sizeof(ximage_));
- memset(pXImage,0,sizeof(ximage_));
- pXImage->object.type=XC_IMAGE;
- pXImage->type=0;
- pXImage->refCount=0;
- pXImage->flag=XC_IMAGE_DEFAULT;
- pXImage->pImage=NULL;
- pXImage->bBitmap=TRUE;
- pXImage->pBitmap=pBitmap;
- pXImage->bAutoDestroy=TRUE;
- delete imageGraphics;
- return (HIMAGE)pXImage;
- }else
- delete pImg;
- }
- }
- return NULL;
- }
复制代码 原版没有,自己添加了一个!
|
|