コード例 #1
0
ファイル: imgs2gif.cpp プロジェクト: Artogn/licecap
int main(int argc, char **argv)
{
  int delay=10;
  int size_w=0,size_h=0;
  int i;
  int rv=0;
  int leaddelay=0;
  bool skipempty=false;
  void *gifOut=NULL;
  const char *fn=NULL;

  LICE_MemBitmap lastfr, fr,fr2;
  int accum_lat=0;

  for (i=1;i<argc;i++)
  {
    if (argv[i][0]=='-')
    {
      if (fn||gifOut) usage("Flag after filename",argv[i]);

      if (!strcmp(argv[i],"-w")) 
      {
        if (++i >= argc) usage("Missing parameter",argv[i-1]);
        size_w = atoi(argv[i]);
      }
      else if (!strcmp(argv[i],"-h")) 
      {
        if (++i >= argc) usage("Missing parameter",argv[i-1]);
        size_h = atoi(argv[i]);
      }
      else if (!strcmp(argv[i],"-d")) 
      {
        if (++i >= argc) usage("Missing parameter",argv[i-1]);
        delay = atoi(argv[i]);
      }
      else if (!strcmp(argv[i],"-skipempty")) skipempty=true;
      else if (!strcmp(argv[i],"-leaddelay")) 
      {
        if (++i >= argc) usage("Missing parameter",argv[i-1]);
        leaddelay=atoi(argv[i]);
      }
      else usage("Unknown option",argv[i]);
    }
    else if (!fn) fn=argv[i];
    else
    {
      printf("Loading %s\n",argv[i]);
      if (!LICE_LoadImage(argv[i],&fr) || !fr.getWidth() || !fr.getHeight()) 
      {
        printf("Error loading image: %s\n",argv[i]);
        continue;
      }
     
      if (!size_w) size_w=fr.getWidth();
      if (!size_h) size_h=fr.getHeight();
      LICE_MemBitmap *usefr = &fr;
      if (fr.getWidth() != size_w || fr.getHeight() != size_h)
      {
        fr2.resize(size_w,size_h);
        LICE_ScaledBlit(usefr=&fr2,&fr,0,0,size_w,size_h,0,0,fr.getWidth(),fr.getHeight(),1.0f,LICE_BLIT_MODE_COPY|LICE_BLIT_FILTER_BILINEAR);
      }
       
      if (!gifOut)
      {
        gifOut=LICE_WriteGIFBegin(fn,usefr,0,leaddelay?leaddelay:delay,false);
        if (!gifOut) usage("Error writing to file",fn);
      }
      else
      {
        accum_lat += delay;
        int diffcoords[4]={0,0,size_w,size_h};
        if (LICE_BitmapCmp(usefr,&lastfr,diffcoords))
        {
          LICE_SubBitmap bm(usefr,diffcoords[0],diffcoords[1], diffcoords[2],diffcoords[3]);
          LICE_WriteGIFFrame(gifOut,&bm,diffcoords[0],diffcoords[1], true, accum_lat);
          accum_lat=0;
        }
        if (skipempty) accum_lat=0;
      }
 
      LICE_Copy(&lastfr,usefr);
    }
  }
  printf("finishing up\n");
  if (gifOut) LICE_WriteGIFEnd(gifOut);
  
  return rv;
}
コード例 #2
-1
ファイル: lice_bmp.cpp プロジェクト: Brado231/Faderport_XT
static LICE_IBitmap *hbmToBit(HBITMAP hbm, LICE_IBitmap *bmp)
{
  BITMAP bm;
  GetObject(hbm, sizeof(BITMAP), (LPSTR)&bm);

  LICE_SysBitmap sysbitmap(bm.bmWidth,bm.bmHeight);
  
#ifdef _WIN32
  HDC hdc=CreateCompatibleDC(NULL);
  HGDIOBJ oldBM=SelectObject(hdc,hbm);

  BitBlt(sysbitmap.getDC(),0,0,bm.bmWidth,bm.bmHeight,hdc,0,0,SRCCOPY);
  GdiFlush();

  if (!bmp) bmp=new LICE_MemBitmap(bm.bmWidth,bm.bmHeight);
  LICE_Copy(bmp,&sysbitmap);

  SelectObject(hdc,oldBM);
  DeleteDC(hdc);
  #else
  LICE_Clear(&sysbitmap,0);
  RECT r={0,0,bm.bmWidth,bm.bmHeight};
  DrawImageInRect(sysbitmap.getDC(),hbm,&r);
  if (!bmp) bmp=new LICE_MemBitmap(bm.bmWidth,bm.bmHeight);
  LICE_Copy(bmp,&sysbitmap);
  #endif

  LICE_FillRect(bmp,0,0,bmp->getWidth(),bmp->getHeight(),LICE_RGBA(0,0,0,255),1.0f,LICE_BLIT_MODE_ADD);

  return bmp;
}