炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2080|回复: 0

代码贡献一: 从Zip加载图片,并且指定加载位置

[复制链接]

该用户从未签到

发表于 2014-1-31 14:52:19 | 显示全部楼层 |阅读模式
  1. /// @brief 加载ZIP图片,指定区位置及大小.
  2. /// @param pZipFileName ZIP文件.
  3. /// @param pImageName        图片名称
  4. /// @param pPassword        密码
  5. /// @param x 坐标.
  6. /// @param y 坐标.
  7. /// @param cx 宽度.
  8. /// @param cy 高度.
  9. /// @return 图片句柄.
  10. XC_API HIMAGE WINAPI XImage_LoadZipRect(wchar_t *pZipFileName,wchar_t *pImageName,wchar_t *pPassword,int x,int y,int cx,int cy)
  11. {
  12.         char zipfilename[MAX_PATH]={0};
  13.         WideCharToMultiByte(CP_ACP,NULL,pZipFileName,wcslen(pZipFileName),zipfilename,MAX_PATH,NULL,NULL);

  14.         char filename_to_extract[MAX_PATH]={0};
  15.         WideCharToMultiByte(CP_ACP,NULL,pImageName,wcslen(pImageName),filename_to_extract,MAX_PATH,NULL,NULL);

  16.         char password[MAX_PATH]={0};
  17.         if(pPassword)
  18.                 WideCharToMultiByte(CP_ACP,NULL,pPassword,wcslen(pPassword),password,MAX_PATH,NULL,NULL);

  19.         //const char *password=NULL;
  20.         //char *zipfilename="C:\\Users\\mengfei\\Desktop\\myzip.zip";  //压缩包
  21.         //char *filename_to_extract="dirtt/123.txt";   //提取文件名
  22.         //char *filename_to_extract="btn.bmp";   //提取文件名

  23.         unzFile zipFile=NULL;
  24.         zipFile = unzOpen64(zipfilename); //打开压缩包
  25.         if (zipFile==NULL)
  26.         {
  27.                 return NULL;
  28.         }

  29.         int outSize=0;
  30.         void  *data =NULL;
  31.         if(pPassword)
  32.                 data=do_extract_onefile(zipFile, filename_to_extract,password,outSize);
  33.         else
  34.                 data=do_extract_onefile(zipFile, filename_to_extract,NULL,outSize);

  35.         unzClose(zipFile);

  36.         if(data)
  37.         {
  38.                 HGLOBAL   hJPG   =   ::GlobalAlloc(GMEM_MOVEABLE,   outSize);
  39.                 LPVOID   lpJGP   =   ::GlobalLock(hJPG);
  40.                 memcpy(lpJGP,   data,   outSize);
  41.                 ::GlobalUnlock(hJPG);
  42.                 LPSTREAM   pstm =NULL;
  43.                 HRESULT   hr   =CreateStreamOnHGlobal(hJPG,   TRUE,   &pstm);
  44.                 assert(SUCCEEDED(hr)   &&   pstm);
  45.                 Image *pImg=Image::FromStream(pstm);
  46.                 pstm->Release();
  47.                
  48.                 free(data);
  49.                 if(pImg)
  50.                 {
  51.                         if(Gdiplus::Ok==pImg->GetLastStatus())
  52.                         {
  53.                                 //缓存图片
  54.                                 Bitmap *pBitmap=new Bitmap(cx,cy);

  55.                                 //将图片绘制到缓存
  56.                                 Graphics* imageGraphics = Graphics::FromImage(pBitmap);

  57.                                 Rect destRect;                       
  58.                                 destRect.X=0;
  59.                                 destRect.Y=0;
  60.                                 destRect.Width=cx;
  61.                                 destRect.Height=cy;

  62.                                 ImageAttributes ImgAtt;

  63.                                 if(Gdiplus::Ok!=imageGraphics->DrawImage(pImg,
  64.                                         destRect,               
  65.                                         x,    //srcX
  66.                                         y,    //srcY
  67.                                         cx,   //cx
  68.                                         cy,   //cy
  69.                                         UnitPixel,&ImgAtt,NULL,NULL))
  70.                                 {
  71.                                         XTRACE("XImage_LoadFileSize() 错误 \n");

  72.                                         delete imageGraphics;
  73.                                         return NULL;
  74.                                 }

  75.                                 ximage_ *pXImage=(ximage_*)malloc(sizeof(ximage_));
  76.                                 memset(pXImage,0,sizeof(ximage_));
  77.                                 pXImage->object.type=XC_IMAGE;
  78.                                 pXImage->type=0;
  79.                                 pXImage->refCount=0;
  80.                                 pXImage->flag=XC_IMAGE_DEFAULT;
  81.                                 pXImage->pImage=NULL;
  82.                                 pXImage->bBitmap=TRUE;
  83.                                 pXImage->pBitmap=pBitmap;
  84.                                 pXImage->bAutoDestroy=TRUE;

  85.                                 delete imageGraphics;
  86.                                 return (HIMAGE)pXImage;
  87.                         }else
  88.                                 delete pImg;
  89.                 }
  90.         }
  91.         return NULL;
  92. }
复制代码
原版没有,自己添加了一个!

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-5-9 04:39 , Processed in 0.068792 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表