⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmp.c

📁 BREW中使用经GZIP压缩的BMP图片
💻 C
字号:
void * unzipbmpex(MJ * mj, char *res_file, uint16 id, int *w, int *h)
{
 uint32 nTmp, size, l;
 byte *buf, *tmpbuf;
 void * pbmSource = NULL;
 byte *pDataBytes;
 void *bmp;
 AEEImageInfo imageInfo;
 boolean bVal = TRUE;
 

 if(NULL == (pbmSource=ISHELL_LoadResDataEx (mj->a.m_pIShell, res_file, 
        id, RESTYPE_IMAGE, NULL, &size)))
 {
  return NULL;
 }
 tmpbuf= (byte *)MALLOC(size-*((byte *)(pbmSource)));
 MEMCPY(tmpbuf,(byte *)pbmSource+*((byte *)(pbmSource)),size-*((byte *)(pbmSource)));
 IMEMASTREAM_Set(mj->pMemStream, tmpbuf, size-*((byte *)(pbmSource)), 0, FALSE);
 l = (*((byte *)pbmSource+size-4))
  +((*((byte *)pbmSource+size-3))<<8)
  +((*((byte *)pbmSource+size-2))<<16)
  +((*((byte *)pbmSource+size-1))<<24);
 ISHELL_FreeResData (mj->a.m_pIShell, pbmSource);
 buf= (byte *)MALLOC(l);
 IUNZIPASTREAM_SetStream(mj->pIUnzipAStream, (IAStream *)mj->pMemStream);
 nTmp = IUNZIPASTREAM_Read(mj->pIUnzipAStream, (void*)buf, l);
 if(nTmp>0)
 {
  while(nTmp<l)
  {
   nTmp = IUNZIPASTREAM_Read(mj->pIUnzipAStream, (void*)(byte *)(buf+nTmp), l-nTmp)+nTmp;
  }
  pDataBytes = (byte *)(buf);
  bmp = CONVERTBMP (pDataBytes, &imageInfo, &bVal);
  *w = imageInfo.cx;
  *h = imageInfo.cy;
  FREE(buf);
  return bmp;
 }
 else if((nTmp == AEE_STREAM_WOULDBLOCK)||(nTmp == 0))
 {
  FREE(buf);
  return NULL;
 }
 return NULL;
}

void *unzipex(MJ * mj, char *res_file, uint16 id, uint32 *xsize)
{
 uint32 nTmp, size, l;
 byte *buf, *tmpbuf;
 void * pbmSource = NULL;
 byte *pDataBytes;
 boolean bVal = TRUE;
 if(NULL == (pbmSource=ISHELL_LoadResDataEx (mj->a.m_pIShell, res_file, 
        id, RESTYPE_IMAGE, NULL, &size)))
 {
  return NULL;
 }
 tmpbuf= (byte *)MALLOC(size-*((byte *)(pbmSource)));
 MEMCPY(tmpbuf,(byte *)pbmSource+*((byte *)(pbmSource)),size-*((byte *)(pbmSource)));
 IMEMASTREAM_Set(mj->pMemStream, tmpbuf, size-*((byte *)(pbmSource)), 0, FALSE);
 l = (*((byte *)pbmSource+size-4))
  +((*((byte *)pbmSource+size-3))<<8)
  +((*((byte *)pbmSource+size-2))<<16)
  +((*((byte *)pbmSource+size-1))<<24);
 ISHELL_FreeResData (mj->a.m_pIShell, pbmSource);
 buf= (byte *)MALLOC(l);
 IUNZIPASTREAM_SetStream(mj->pIUnzipAStream, (IAStream *)mj->pMemStream);
 nTmp = IUNZIPASTREAM_Read(mj->pIUnzipAStream, (void*)buf, l);
 if(nTmp>0)
 {
  //*xsize = nTmp;
  while(nTmp<l)
  {
   nTmp = IUNZIPASTREAM_Read(mj->pIUnzipAStream, (void*)(byte *)(buf+nTmp), l-nTmp)+nTmp;
  }
  *xsize = l>nTmp?nTmp:l;
  pDataBytes = (byte *)(buf);
  return buf;
 }
 else if((nTmp == AEE_STREAM_WOULDBLOCK)||(nTmp == 0))
 {
  FREE(buf);
  return NULL;
 }
 return NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -