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

📄 gai01011.c

📁 此程序是一个数字图像灰度处理程序
💻 C
📖 第 1 页 / 共 2 页
字号:
   /**********5***********/
   setcolor(0);
   rectangle(410,26,460,46);
   setfillstyle(1,2);
   bar(412,28,458,44);
   outtextxy(414,30,"DaYin");
   /**********6**********/
   setcolor(0);
   rectangle(480,26,540,46);
   setfillstyle(1,2);
   bar(482,28,538,44);
   outtextxy(484,30,"TuiChu");
   /************菜单结束***********/

   /************最下端文本输出区设置************/
   setcolor(14);                   /** 最下边的文本框属性设置**/
   rectangle(1,451,639,479);      /*** 是花边框 **/
   setfillstyle(1,15);           /*设置填充样式和颜色*/
   bar(3,453,638,477);          /** bar 画区域填充 结束  **/
  /*************中间的文本输出区设置************/
   setcolor(14);
   rectangle(1,52,639,450);
   setfillstyle(1,8);         /*** 文本输出的相关属性**/
   bar(3,54,638,448);
   setcolor(4);

   /**********文本输出结束**********/
}

/****************************鼠标相关操作的函数**************************/


   /***************鼠标样式的设置函数****************/
  void   MouseMath()/*计算鼠标的样子*/   
  {  int   i,j,jj,k;
    long   UpNum[16]={   
                0x3fff,0x1fff,0x0fff,0x07ff,   
                0x03ff,0x01ff,0x00ff,0x007f,   
                0x003f,0x00ff,0x01ff,0x10ff,   
                0x30ff,0xf87f,0xf87f,0xfc3f   
                };   
    long  DownNum[16]={
                0x0000,0x7c00,0x6000,0x7000,   
                0x7800,0x7c00,0x7e00,0x7f00,   
                0x7f80,0x7e00,0x7c00,0x4600,   
                0x0600,0x0300,0x0300,0x0180   
              };   
        for(i=0;i<16;i++)   
        {   
        j=jj=15;   
          while(UpNum[i]!=0)   
          {   
          up[i][j]=UpNum[i]%2;   
          j--;   
          UpNum[i]/=2;   
          }   
        while(DownNum[i]!=0)   
          {   
          down[i][jj--]=DownNum[i]%2;   
          DownNum[i]/=2;   
          }   
      for(k=j;k>=0;k--)   
        up[i][k]=0;   
      for(k=jj;k>=0;k--)   
        down[i][k]=0;   
      for(k=0;k<16;k++)/*四种组合方式*/   
        {   
        if(up[i][k]==0&&down[i][k]==0)   
          mouse_draw[i][k]=1;   
        else   if(up[i][k]==0&&down[i][k]==1)   
          mouse_draw[i][k]=2;   
        else   if(up[i][k]==1&&down[i][k]==0)   
          mouse_draw[i][k]=3;   
        else   
          mouse_draw[i][k]=4;   
      }   
    }   
    mouse_draw[1][2]=4;/*特殊点*/   
  }
    
/*****************鼠标光标显示**************/
void   MouseOn(int   x,int   y)   /**鼠标光标显示**/
{
    int   i,j;   
    int   color;   
    
      for(i=0;i<16;i++)/*画鼠标*/   
      {   
        for(j=0;j<16;j++)   
          {   
          pixel_save[i][j]=getpixel(x+j,y+i);/*保存原来的颜色*/   
          if(mouse_draw[i][j]==1)   
            putpixel(x+j,y+i,0);   
          else   if(mouse_draw[i][j]==2)   
            putpixel(x+j,y+i,15);   
          }   
        }
 }

/****************隐藏鼠标光标*****************/
void   MouseOff()          /***鼠标光标隐藏***/
  {   
  int   i,j,x,y,color;   
    x=MouseX;   
    y=MouseY;   
    for(i=0;i<16;i++)/*原位置异或消去*/   
      for(j=0;j<16;j++)   
          {   
          if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)   
            continue;   
          color=getpixel(x+j,y+i);   
          putpixel(x+j,y+i,color^color);   
          putpixel(x+j,y+i,pixel_save[i][j]);   
          }   
  }   
  /*鼠标是否加载   
      MouseExist:1=加载   
              0=未加载   
      MouseButton:鼠标按键数目   */   
void   MouseLoad()
      {   
        _AX=0x00;   
        geninterrupt(0x33);   
        MouseExist=_AX;   
        MouseButton=_BX;   
      }   
    
  /*鼠标状态值初始化*/   
 void   MouseReset()
      {   
        _AX=0x00;   
        geninterrupt(0x33);   
      }   
    
  /*设置鼠标左右边界   
      lx:左边界   
      gx:右边界                 */
void   MouseSetX(int   lx,int   rx)
      {   
        _CX=lx;   
        _DX=rx;   
        _AX=0x07;   
        geninterrupt(0x33);   
      }   
    
  /*设置鼠标上下边界   
      uy:上边界   
      dy:下边界               */   
  void   MouseSetY(int   uy,int   dy)   
      {   
        _CX=uy;   
        _DX=dy;   
        _AX=0x08;   
        geninterrupt(0x33);   
      }   
    
  /*设置鼠标当前位置   
      x:横向坐标   
      y:纵向坐标                 */   
  void   MouseSetXY(int   x,int   y)   
      {   
        _CX=x;   
        _DX=y;   
        _AX=0x04;   
        geninterrupt(0x33);   
      }   
    
  /*设置鼠标速度(缺省值:vx=8,vy=1)   
      值越大速度越慢  */
  void   MouseSpeed(int   vx,int   vy)   
      {   
        _CX=vx;   
        _DX=vy;   
        _AX=0x0f;   
        geninterrupt(0x33);   
      }   
    
  /*获取鼠标按下键的信息*/   
  /*是否按下左键   
      返回值:   1=按下   0=释放*/   
  int   LeftPress()   
      {   
        _AX=0x03;   
        geninterrupt(0x33);   
        return(_BX&1);   
      }   
    
  /*是否按下中键   
      返回值同上       */   
  int   MiddlePress()   
      {   
        _AX=0x03;   
        geninterrupt(0x33);   
        return(_BX&4);   
      }   
    
  /*是否按下右键   
      返回值同上         */   
  int   RightPress()   
      {   
        _AX=0x03;   
        geninterrupt(0x33);   
        return(_BX&2);   
      }   
    
  /*获取鼠标当前位置*/   
  void   MouseGetXY()   
      {   
        _AX=0x03;   
        geninterrupt(0x33);   
        MouseX=_CX;   
        MouseY=_DX;   
      }   

/*****************鼠标按键记录函数*********************/
  int   MouseStatus()/*鼠标按键情况*/   
  {   
    int   x,y;   
    int   status;   
    int   press=0;   
    
    int   i,j,color;   
    status=0;/*默认鼠标没又移动*/   
    
    x=MouseX;   
    y=MouseY;   
    
    while(x==MouseX&&y==MouseY&&status==0&&press==0)   
    {   
    if(LeftPress()&&RightPress())   
      press=1;   
    else   if(LeftPress())   
      press=2;   
    else   if(RightPress())   
      press=3;   
    MouseGetXY();   
    if(MouseX!=x||MouseY!=y)   
      status=1;   
    }   
    if(status)/*移动情况才重新显示鼠标*/   
    {   
    for(i=0;i<16;i++)/*原位置异或消去*/   
      for(j=0;j<16;j++)   
          {   
          if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)   
            continue;   
          color=getpixel(x+j,y+i);   
          putpixel(x+j,y+i,color^color);   
          putpixel(x+j,y+i,pixel_save[i][j]);   
          }   
    MouseOn(MouseX,MouseY);/*新位置显示*/   
    }   
    if(press!=0)/*有按键得情况*/   
      return   press;   
    return   0;/*只移动得情况*/   
  }   
 /*********************屏幕接收信息处理***********************/
 int xinxichuli(char chs[])
 {
   int i,jis,num=0;
   jis=strlen(chs);
   for(i=0;i<jis;i++)
    {
    if(chs[i]<48||chs[i]>57)
      {
       outtextxy(10,460,"shu ru wu xiao shu ju!qiang zhi chu li wei 0");
       return 0;
       }
    else num=num+((chs[i]-48)*pow(10,(jis-i-1)));
    }
   if(num<0||num>255)
    {
     outtextxy(10,460,"shu ru wu xiao shu ju!qiang zhi chu li wei 0");
     return 0;
    }
   else    return num;
 }
 /*******************鼠标操作响应函数***************************/
 void  main()
  {
    int i=0,prkey=0,caozuo=1,wenjian=3;
     /*******prkey记录鼠标按键操作情况,
              以及如何处理********/
   int chongxin=1;
   int kaishi,jiesu;
   char chkaishi[3],chjiesu[3];
   char spr[30];
   int driver=DETECT,mode;
 tocaidan2:
   registerbgidriver(EGAVGA_driver);
   detectgraph(&driver, &mode);
   initgraph(&driver, &mode,"");
   setbkcolor(0);
   MouseMath();     /*计算鼠标形状,一开始必须使用,后面就不用了*/
   MouseSetY(0,479);
   MouseSetX(0,639);
   MouseSetXY(100,100);
    
 tocaidan:
     caidan();
  if(prkey==10)
    {
     setcolor(2);
     outtextxy(3,58,"shu ru wen jian ming:");
      setcolor(4);
     outtextxy(10,78,fliename);
     if(wenjian==0)
     outtextxy(10,460,"shu ru wu xiao wen jian ming!");
     }
  if(prkey==30)
    {
      kaishi=xinxichuli(chkaishi);
      jiesu=xinxichuli(chjiesu);
      if(jiesu<kaishi)
        {
         i=kaishi;
         kaishi=jiesu;
         jiesu=i;
        }
      setcolor(2);
      outtextxy(3,58,"shu ru wen jian ming:");
      setcolor(4);
      outtextxy(10,78,fliename);
      setcolor(2);
      outtextxy(3,100,"shu ru cha kan de fan wei qishidian,zhongzhidian(0--255):");
      setcolor(4);
      sprintf(spr,"cong %d kaishi",kaishi);
      outtextxy(10,120,spr);
      setcolor(10);
      sprintf(spr,"dao %d jieshu",jiesu);
      outtextxy(140,120,spr);
     }
  MouseOn(MouseX,MouseY);/*第一次显示鼠标*/   
    while(MouseStatus()!=4)
    {
       i=0;
      switch(MouseStatus())   
      {
        /**********左键双击按下的处理操作******/
        case   1:
        /**************左键按下的处理操作*****/
        case   2:   
                      MouseOff();
                      /****1*****/
                      if((MouseX>4&&MouseX<64)&&(MouseY>26&&MouseY<46))
                      {
                       if(chongxin==1)
                           {
                           setcolor(2);
                           outtextxy(3,58,"qing shu ru wen jian ming:");
                           scanf("%s",fliename);
                           prkey=10;
                           chongxin=2;
                           wenjian=duhuiduzhi(xiangsu,fliename);        /**文件是否出错**/
                           goto tocaidan;
                           }
                         else
                         {
                          chongxin=1;
                          prkey=40;
                          goto tocaidan;
                          }
                       }
                      /*****2****/
                      if((MouseX>80&&MouseX<130)&&(MouseY>26&&MouseY<46))
                      {
                        closegraph();
                        TuXianShi( fliename,1);
                        goto tocaidan2;
                      }
                      /****3****/
                      if((MouseX>150&&MouseX<260)&&(MouseY>26&&MouseY<46))
                      {
                        closegraph();
                       TuXianShi(fliename,3);
                        goto tocaidan2;
                      }
                      /****4****/
                       if((MouseX>280&&MouseX<390)&&(MouseY>26&&MouseY<46))
                      {
                        closegraph();
                        huatuZHFT();
                        goto tocaidan2;
                      }
                      /*****5****/
                       if((MouseX>410&&MouseX<460)&&(MouseY>26&&MouseY<46))
                      {
                        if(chongxin!=3)
                         {
                           if(caozuo==1)
                             {
                              setcolor(2);
                              outtextxy(3,100,"qing shu ru cha kan de qishidian(0--255):");
                              scanf("%s",chkaishi);
                              outtextxy(3,120,"qing shu ru cha kan de zhongzhidian(0--255):");
                              scanf("%s",chjiesu);
                              prkey=30;
                              caozuo=2;
                              goto tocaidan;
                             }
                           if(caozuo==2)
                             {
                              closegraph();
                              shuchuhuidu(xiangsu,kaishi,jiesu);
                              caozuo=1;
                              chongxin=3;
                              goto tocaidan2;
                             }
                          }
                        else
                          {
                           chongxin=1;
                           prkey=10;
                           goto tocaidan;
                          }
                      }
                      /****6****/
                       if((MouseX>480&&MouseX<540)&&(MouseY>26&&MouseY<46))
                           exit(1);
                      MouseGetXY();
                      MouseOn(MouseX,MouseY);
                      break;   
        /******右键按下相应的处理操作*****/
        case   3:   
                      MouseOff();
                            prkey=40;
                            goto tocaidan;
                      MouseGetXY();
                      MouseOn(MouseX,MouseY);
                      break;   
        default:break;   
      }   
    }   
    closegraph();   
  }   



⌨️ 快捷键说明

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