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

📄 pslider.cpp

📁 this a image processing program
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    }    // Toggle Fullscreen mode    if (ckey==cimg::keyF)  disp->toggle_fullscreen().display(vslide);    // Swap links orientation    if (ckey==cimg::keyARROWUP) { lorient=!lorient; update_flag=1; }    // Swap link visualization    if (ckey==cimg::keyL) {   // key 'L'      noLink=!noLink; update_flag=1;    }    // Pause autorun    if (dautorun>=0 && ckey==cimg::keyP) {      if (autorun>=0) autorun=-1;      else autorun = dautorun;      update_flag = 1;    }    // Add a link    if (ckey==cimg::keyF1) {      int bbox[6];      std::fprintf(stderr," > Add link #%d : ",nol+1); std::fflush(stderr);      vslide.feature_selection(bbox,2,*disp);      int x0=bbox[0],y0=bbox[1],x1=bbox[3],y1=bbox[4];      x0 = x0*owidth/width;      y0 = y0*oheight/height;      x1 = x1*owidth/width;      y1 = y1*oheight/height;      std::fprintf(stderr,"Page %d, Box = (%d,%d)-(%d,%d)",current_slide+1,x0,y0,x1,y1);      if (x0<0 || x1<0 || y0<0 || y1<0 || x0==x1 || y0==y1 || x1>=(int)owidth || y1>=(int)oheight) std::fprintf(stderr,", Range not valid\n");      else {        Links[nol].page = current_slide;        Links[nol].xmin = x0;        Links[nol].xmax = x1;        Links[nol].ymin = y0;        Links[nol].ymax = y1;        std::sprintf(Links[nol].url,"file:Edit Link_#%d",nol+1);        nol++;        save_Links(Links,nol,Link_filename);        std::fprintf(stderr,".. '%s' updated\n",Link_filename);      }      update_flag=1;    }    // Remove a Link    if (overLink>=0 && ckey==cimg::keyF2) {      std::fprintf(stderr," > Remove link %d...",overLink+1); std::fflush(stderr);      for (unsigned int i=overLink; i<nol-1; i++) Links[i]=Links[i+1];      nol--;      save_Links(Links,nol,Link_filename);      std::fprintf(stderr," '%s' updated\n",Link_filename);      update_flag=1;    }    // Insert a new link page    if (ckey==cimg::keyF3) {      std::fprintf(stderr," > Insert a new link page ... "); std::fflush(stderr);      for (unsigned int i=0; i<nol; i++) if (Links[i].page>=current_slide) Links[i].page++;      save_Links(Links,nol,Link_filename);      std::fprintf(stderr," '%s' updated\n",Link_filename);      update_flag=1;    }    // Remove a link page    if (ckey==cimg::keyF4) {      std::fprintf(stderr," > Remove a link page ..."); std::fflush(stderr);      for (unsigned int i=0; i<nol; i++) {        if (Links[i].page==current_slide) { for (unsigned int k=i; k<nol-1; k++) Links[k]=Links[k+1]; nol--; i--; }        else { if (Links[i].page>current_slide) Links[i].page--; }      }      save_Links(Links,nol,Link_filename);      std::fprintf(stderr," '%s' updated\n",Link_filename);      update_flag=1;    }    // Edit link file    if (ckey==cimg::keyF5) {      if (cimg_OS==1) {        std::fprintf(stderr," > Edit link file : ");        std::sprintf(str,"xemacs %s",Link_filename);        std::fprintf(stderr,"'%s'\n",str);        std::system(str);        nol=load_Links(Link_filename,Links);        update_flag=1;      }    }    // Histogram normalization and gamma correction    if (ckey==cimg::key1) { gamma=-1; update_flag=1; }    if (ckey==cimg::key2) { if (gamma<0) gamma=1; gamma+=0.15; update_flag=1; }    if (ckey==cimg::key3) { if (gamma<0) gamma=1; gamma-=0.15; update_flag=1; }    if (ckey==cimg::key4) { gamma=1; update_flag=1; }    // Help menu    if (ckey==cimg::keyH) {      CImg<unsigned char> help_win(550,450,1,3);      const unsigned char white[3]={255,255,255};      help_win.fill(0);      help_win.draw_text("PSlider -- Keyboard reference --\n\n"			 "\t H : Display this help\n"			 "\t Q : Exit PSlider\n"			 "\t F : Toggle Fullscreen\n"			 "\t ESC, or Right mousebutton : Open Thumbnail menu\n"			 "\t RIGHTARROW, PAGEDOWN, SPACE, ENTER : Go to the next slide\n"			 "\t LEFTTARROW, PAGEUP, B, BACKSPACE : Go to the previous slide\n"			 "\t HOME, END : Go to the first/last slide\n"			 "\t DOWNARROW : Swap landscape orientation\n"			 "\t UPARROW   : Swap links orientation\n"			 "\t L         : Swap link visualization\n"			 "\t P         : Pause on/off in autorun mode\n"			 "\t F1        : Add a link\n"			 "\t F2        : Remove a link\n"			 "\t F3        : Insert a new link page\n"			 "\t F4        : Remove a link page\n"			 "\t F5        : Edit the link file\n"			 "\t  1        : Color normalization\n"			 "\t  2        : Darken the slides\n"			 "\t  3        : Lighten the slides\n"			 "\t  4        : Reset the gamma correction\n",			 20,20,white);      help_win.draw_line(4,4,help_win.dimx()-5,4,white);      help_win.draw_line(help_win.dimx()-5,4,help_win.dimx()-5,help_win.dimy()-5,white);      help_win.draw_line(help_win.dimx()-5,help_win.dimy()-5,4,help_win.dimy()-5,white);      help_win.draw_line(4,help_win.dimy()-5,4,4,white);      vslide.draw_image(help_win,(vslide.dimx()-help_win.dimx())/2,(vslide.dimy()-help_win.dimy())/2,0,0,0.75);      disp->key=0;      vslide.display(*disp);      while (!disp->is_closed && !disp->key && !disp->button) disp->wait();      disp->key=disp->button=0;      update_flag = 1;      time0 = (unsigned int)time(NULL);    }    // Thumbnails menu    //------------------    static bool fs_flag = false;    if (ckey==cimg::keyESC || disp->button&2 || (dispthumb && (dispthumb->is_closed || dispthumb->key==cimg::keyESC || dispthumb->button&2))) {      if (!dispthumb) {	// Open menu	fs_flag = disp->is_fullscreen;	if (fs_flag) disp->toggle_fullscreen().display(vslide);        unsigned int fx=thumbs[0].dimx()+8,fy=thumbs[0].dimy()+8,x,y;        menuthumb = CImg<unsigned char>((nop<8?nop*fx:8*fx),fy*(1+(nop-1)/8),1,3).fill(0);        { cimg_forXY(menuthumb,x,y) menuthumb(x,y,0)=menuthumb(x,y,1)=menuthumb(x,y,2)=(unsigned char)(std::cos(x/30.0)*std::sin(y/30.0)*64)+64; }        dispthumb = new CImgDisplay(menuthumb,"Presentation Layout",0,2,fullscreen);        x=y=0;        for (unsigned int k=0; k<nop; k++) {          menuthumb.draw_image(thumbs[k],x+4,y+4,0,0);          menuthumb.draw_line(x+3,y+3,x+3+thumbs[k].dimx()+1,y+3,white);          menuthumb.draw_line(x+3+thumbs[k].dimx()+1,y+3,x+3+thumbs[k].dimx()+1,y+3+thumbs[k].dimy()+1,white);          menuthumb.draw_line(x+3+thumbs[k].dimx()+1,y+3+thumbs[k].dimy()+1,x+3,y+3+thumbs[k].dimy()+1,gray);          menuthumb.draw_line(x+3,y+3+thumbs[k].dimy()+1,x+3,y+3,gray);          x+=fx;          if (x>=menuthumb.width) { x=0; y+=fy; }        }        menuthumb.display(*dispthumb);        disp->button&=~2;      }      else {	// Close menu        delete dispthumb;        dispthumb=NULL;        disp->button&=~2;        update_flag=1;	if (fs_flag) { disp->toggle_fullscreen(); fs_flag = false; }      }    }    if (dispthumb) {      int next=current_slide,x,y,fx=thumbs[0].dimx()+8,fy=thumbs[0].dimy()+8,x0,x1,y0,y1;      CImg<unsigned char> tmp(menuthumb);      x = dispthumb->mouse_x/fx;      y = dispthumb->mouse_y/fy;      if (x>=0 && y>=0 && y*8+x<(int)nop) {        x0 = x*fx; y0 = y*fy;        x1 = (x+1)*fx-1; y1 = (y+1)*fy-1;        tmp.draw_line(x0,y0,x1,y0,yellow);        tmp.draw_line(x1,y0,x1,y1,yellow);        tmp.draw_line(x1,y1,x0,y1,yellow);        tmp.draw_line(x0,y1,x0,y0,yellow);        { for (int y=y0; y<=y1; y+=2) for (int x=x0; x<=x1; x+=2) tmp(x,y,0)=200; }        tmp.display(*dispthumb);        next = y*8+x;      } else menuthumb.display(*dispthumb);      if (dispthumb->button&1) {        current_slide = next;        update_flag = 1;        dispthumb->button&=~1;      }    }    // Display a slide    //-----------------    if (update_flag) {      if (current_slide!=old_slide) {        if (current_slide==(old_slide-1)%nop) nslide=slide;        if (current_slide==(old_slide+1)%nop) slide=nslide;        else { std::sprintf(str,slideformat,current_slide+1); slide = CImg<unsigned char>(str); }      }      vslide = slide;      vslide.resize(width,height,1,3,5);      if (orient) vslide.rotate(180);      if (gamma!=1) {        if (gamma<0) vslide.equalize_histogram();        else cimg_forXYV(vslide,x,y,k) vslide(x,y,k) = (unsigned char)(std::pow(vslide(x,y,k)/256.0,gamma)*256);      }      if (dautorun>0 && autorun<0) vslide.draw_text("Paused",2,2,white,black);      if (!noLink)	for (i=0; i<nol; i++) {	  if (Links[i].page==current_slide) {	    xmin = Links[i].xmin*width/owidth;   xmax = Links[i].xmax*width/owidth;	    ymin = Links[i].ymin*height/oheight; ymax = Links[i].ymax*height/oheight;	    if (lorient) {	      xmin = width-xmin;	      xmax = width-xmax;	      ymin = height-ymin;	      ymax = height-ymax;	    }	    vslide.draw_line(xmin,ymin,xmax,ymin,green,0x88888888);	    vslide.draw_line(xmax,ymin,xmax,ymax,green,0x88888888);	    vslide.draw_line(xmax,ymax,xmin,ymax,green,0x88888888);	    vslide.draw_line(xmin,ymax,xmin,ymin,green,0x88888888);	  }	}      vslide.display(*disp);      update_flag=0;      overLink=-1;      if (current_slide!=old_slide && current_slide!=(old_slide-1)%nop) {        std::sprintf(str,slideformat,((current_slide+1)%nop)+1); nslide = CImg<unsigned char>(str);      }      old_slide=current_slide;      nautolink=-1;    }    // Check mouse over links    //------------------------    ooverLink = overLink;    overLink = -1;    layer = vslide;    mouse_x = disp->mouse_x;    mouse_y = disp->mouse_y;    if (autorun<0 || (autorun>=0 && (unsigned int)time(NULL)>time0+3*autorun/4)) {      for (i=0; i<nol; i++) {	xmin = Links[i].xmin*width/owidth;   xmax = Links[i].xmax*width/owidth;	ymin = Links[i].ymin*height/oheight; ymax = Links[i].ymax*height/oheight;	if (lorient) {	  int tmp = xmin;	  xmin = width-xmax;	  xmax = width-tmp;	  tmp = ymin;	  ymin = height-ymax;	  ymax = height-tmp;	}	if (autorun>=0 && Links[i].page==(current_slide+1)%nop && !cimg::strncasecmp(cimg::filename_split(Links[i].url),"settimer",8)) {	  std::sscanf(Links[i].url,"file:%d.settimer",&nautorun);	  std::fprintf(stderr," > Next slide timer will be %d seconds\n",nautorun);	}	if (autorun<0 && Links[i].page==current_slide && mouse_x>=xmin && mouse_x<=xmax && mouse_y>=ymin && mouse_y<=ymax	    && cimg::strncasecmp(Links[i].url,"settimer",8) ) {	  overLink = i;	  if (!noLink) {	    for (int y=ymin; y<=ymax; y+=2) for (int x=xmin; x<=xmax; x+=2) { layer(x,y,1)=128; layer(x,y,0)=layer(x,y,2)=0; }	    layer.draw_text(2,2,white,black,11,1,Links[i].url);	  }	  i = nol;	}	if (autorun>=0 && Links[i].page==current_slide && nautolink<(int)i) { overLink = nautolink = i; i=nol; }      }      if (overLink<0) links_done = true;    }    if (autorun<0 && overLink!=ooverLink) layer.display(*disp);    if (overLink>=0 && (disp->button&1 || autorun>=0)) {      disp->button&=~1;      const Link l = Links[overLink];      ext = cimg::filename_split(l.url);      for (unsigned int m=0; m<nom; m++) {        if (!cimg::strcasecmp(ext,mimes[m].ext) ||	    (( !cimg::strncasecmp(l.url,"http://",7) || !cimg::strncasecmp(l.url,"ftp://",6)	       || !cimg::strncasecmp(l.url,"www.",4) || !cimg::strncasecmp(l.url,"ftp.",4) )	     &&	     ( !cimg::strcasecmp(mimes[m].ext,"htm") || !cimg::strcasecmp(mimes[m].ext,"html")))	    ) {          if (slide_type==1) std::sprintf(str,"%s ../%s",mimes[m].command,l.url+1+cimg::strfind(l.url,':'));          else std::sprintf(str,"%s %s",mimes[m].command,l.url+1+cimg::strfind(l.url,':'));          if (!cimg::strncasecmp(l.url,"http:",5)) {            if (slide_type==1) std::sprintf(str,"%s ../%s",mimes[m].command,l.url+5);            else std::sprintf(str,"%s %s",mimes[m].command,l.url+5);          }          if (!cimg::strncasecmp(l.url,"file:",5)) {            if (slide_type==1) std::sprintf(str,"%s ../%s",mimes[m].command,l.url+5);            else std::sprintf(str,"%s %s",mimes[m].command,l.url+5);          }          if (!cimg::strncasecmp(l.url,"file://",7)) {            if (slide_type==1) std::sprintf(str,"%s ../%s",mimes[m].command,l.url+7);            else std::sprintf(str,"%s %s",mimes[m].command,l.url+7);          }          if (!cimg::strncasecmp(l.url,"http://",7) || !cimg::strncasecmp(l.url,"ftp://",6) ||	      !cimg::strncasecmp(l.url,"www.",4)	      ) std::sprintf(str,"%s %s",mimes[m].command,l.url);          if (cimg_OS==1) {	    if (autorun<0) std::sprintf(str+cimg::strlen(str)," &");	    //else std::sprintf(str+cimg::strlen(str),"");	  }          std::fprintf(stderr," > Launching '%s' ... ",str); std::fflush(stderr); std::system(str);	  if (autorun>=0) time0 = (unsigned int)time(NULL)-(unsigned int)3*autorun/4;	  fprintf(stderr,"Done\n");          m=nom;        }      }    }    if (overLink<0 && disp->button&1) disp->button&=~1;  }  // Exit pslider.  if (disp) delete disp;  std::fprintf(stderr,"\n*** Exit PSlider ***\n\n");  return 0;}

⌨️ 快捷键说明

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