C\#그림 뷰 어 를 어떻게 실현 합 니까?

5963 단어 C#그림.뷰 어
이 글 은 C\#를 사용 하여 그림 뷰 어 기능 을 실현 하 는 방법 을 간단하게 소개 합 니 다.이 도구 가 저장 하 는 기능 은 다음 과 같 습 니 다.
1、 '이전','다음'이라는 단 추 를 통 해 그림 을 번갈아 볼 수 있 습 니 다.
 2.그림 에 대한 회전 실현
 3.회전 후 그림 에 대한 저장 기능 을 실현 합 니 다.이 프로그램 은 회전 90/180/270 과 같은 실현 을 제공 할 뿐만 아니 라 회전 임 의 각도 의 실현 을 완성 하 는 방법 도 제공 합 니 다.
4.이 프로그램 은 Windows 그림 보기 그림 크기 조정 기능 을 실현 하지 않 았 습 니 다.이 부분의 기능 은 주로 그림 이 PictureBox 컨트롤 에서 의 높이 와 너 비 를 바 꾸 면 됩 니 다.
2.사고 방향 실현
2.1 이미지 교환 조회 기능 의 실현
먼저 다음 의 첫 번 째 기능 점 의 실현 을 분석 하고 그림 의 교대 조 회 를 실현 하려 면 우 리 는 아래 의 사고 에 따라 실현 할 수 있다.
첫 번 째 단 계 는 디 렉 터 리 에 있 는 모든 그림 의 집합 을 얻 습 니 다.이 때 Directory.GetFiles()를 사용 하여 디 렉 터 리 에 있 는 모든 파일 을 얻 은 다음 이 집합 을 선별 하여 그림 의 파일 을 선별 하고 코드 는 확장자 로 선별 합 니 다.
두 번 째 단 계 는 모든 그림 집합 을 얻 은 후에 그림 의 교대 가 이 집합 의 색인 을 바 꾸 면 이전 과 다음 장의 기능 을 실현 할 수 있다.
세 번 째 단계,마지막 장 이나 첫 장 을 고려 해 야 하 는 상황 에서 다음 장 이나 이전 그림 을 클릭 하여 첫 번 째 장 또는 마지막 장 으로 바 꿔 야 합 니 다.
사고방식 은 바로 위의 것 이다.위의 사고방식 이 생기 면 구체 적 인 코드 를 보고 대조 하여 이해 해 보 자.

//    
//                 
  public static List<string> GetImgCollection(string path)
  {
   string[] imgarray = Directory.GetFiles(path);
   var result = from imgstring in imgarray
       where imgstring.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) || 
       imgstring.EndsWith("png", StringComparison.OrdinalIgnoreCase)||
       imgstring.EndsWith("bmp", StringComparison.OrdinalIgnoreCase)
       select imgstring;
   return result.ToList();
  }

   //    
  //                
  private int GetIndex(string imagepath)
  {
   int index = 0; 
   for (int i = 0; i < imgArray.Count; i++)
   {
    if (imgArray[i].Equals(imagepath))
    {
     index = i;
     break;
    }
   }

   return index;
  }

  //        
  private void SwitchImg(int index)
  {
   newbitmap = Image.FromFile(imgArray[index]);
   picBoxView.Image = newbitmap;
   imgPath = imgArray[index];
  } 


  //    
   //      
  private void btnPre_Click(object sender, EventArgs e)
  {
   int index = GetIndex(imgPath);
   //           ,         ExternalException  
   newbitmap.Dispose();
   if (index == 0)
   {
    SwitchImg(imgArray.Count - 1);
   }
   else
   {
    SwitchImg(index - 1);
   }
  }

  //      
  private void btnNext_Click(object sender, EventArgs e)
  {
   int index = GetIndex(imgPath);
   //           ,         ExternalException  
   //      Save            GDI     ,            ,        ,       ,                  
   newbitmap.Dispose();
   if (index != imgArray.Count - 1)
   {
    SwitchImg(index + 1);
   }
   else
   {
    SwitchImg(0);
   }
  }
2.2 그림 회전 기능 의 실현
위의 코드 는 첫 번 째 기능 점 의 문 제 를 실현 했다.다음은 두 번 째 기능 점 인 이미지 회전 을 어떻게 실현 하 는 지 설명 한다.
윈도 우즈 가 자체 적 으로 가지 고 있 는 이미지 뷰 어 에 대해 회전 하 는 각 도 는 시계 방향 으로 90 도 회전 하거나 시계 반대 방향 으로 90 도 회전 할 수 밖 에 없다.이 기능 은 실현 하기 매우 간단 하 다 고 할 수 있다.Image.RotateFlip(RotateFlip Type)방법 만 사용 하면 완성 할 수 있다.어떤 친구 들 은 그림 에 대해 임의의 각 도 를 회전 시 키 려 고 한다.이 문제 의 소스 코드 에서 도 구체 적 인 실현 이 있다.글 의 마지막 에 원본 코드 를 다운로드 하여 볼 수 있 습 니 다.여기 에는 구체 적 인 코드 가 붙 어 있 지 않 습 니 다.다음은 Windows 자체 가 가지 고 있 는 이미지 뷰 어의 회전 기능 을 어떻게 실현 하 는 지 보 겠 습 니 다.

 //      90     
  private void btnRotate_Click(object sender, EventArgs e)
  {
   picBoxView.SizeMode = PictureBoxSizeMode.Zoom;
   
   //      90        
   newbitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);
   picBoxView.Image = newbitmap;
   isRotate = true;
   //newbitmap = (Image)ImageManager.RotateImg(bitmap, 90f, Color.Transparent); ;
   //bitmap.Dispose();
   //picBoxView.Image = newbitmap;
  }
  
  //      90 
  private void btncounterclockwiseRotate_Click(object sender, EventArgs e)
  {
   picBoxView.SizeMode = PictureBoxSizeMode.Zoom;
 
   //      90      
   newbitmap.RotateFlip(RotateFlipType.Rotate270FlipNone);
   picBoxView.Image = newbitmap;
   isRotate = true;
   //             
   //newbitmap = (Image)ImageManager.RotateImg(bitmap, 360f-90f, Color.Transparent); ;
   //bitmap.Dispose();
   //picBoxView.Image = newbitmap;
  }
2.3 회전 이미지 저장 기능 의 실현
마지막 으로 회전 이미지 저장 에 대한 실현 입 니 다.이때 저 는 윈도 우즈 자체 이미지 뷰 어의 실현 방식 을 참 고 했 습 니 다.왜냐하면 저 는 윈도 우즈 자체 이미지 뷰 어로 그림 을 탐색 하기 때 문 입 니 다.제 가 그림 을 회전 할 때 회전 하 는 그림 에 실시 간 으로 저장 하 는 것 이 아니 라 윈도 우즈 자체 이미지 뷰 어 를 닫 을 때 회전 하 는 그림 이 파일 에 저 장 됩 니 다.이런 생각 이 생 긴 후에 저 는 제 가 저장 한 코드 논 리 를 창 이 닫 힌 이벤트 처리 프로그램 에 두 었 습 니 다.이때 저 장 된 기능 은 Image.save(path)방법 만 사용 하면 그림 에 대한 저장 을 완성 할 수 있 습 니 다.다음은 구체 적 인 코드 의 실현 을 보 겠 습 니 다.

 //                  
  private void Form1_FormClosed(object sender, FormClosedEventArgs e)
  {
   if (imgPath == null || isRotate == false)
   {
    return;
   }

   //         
   switch (Path.GetExtension(imgPath).ToLower())
   {
    case ".png":
     newbitmap.Save(imgPath, ImageFormat.Png);
     newbitmap.Dispose();
     break;
    case ".jpg":
     newbitmap.Save(imgPath);
     newbitmap.Dispose();
     break;
    default:
     newbitmap.Save(imgPath, ImageFormat.Bmp);
     newbitmap.Dispose();
     break;
   }
  }
3.실현 효과
위 에서 이미 이 프로그램 을 실현 하 는 사고방식 을 소개 했다.친 구 는 도대체 사용자 정의 이미지 뷰 어가 어떤 모습 인지 보고 싶 어 하지 않 을 까?다음은 하나의 애니메이션 을 통 해 프로그램의 실행 효 과 를 더욱 구체 적 으로 볼 수 있 습 니 다.

소결
여기까지 이 글 의 내용 소개 가 끝 났 으 니 비슷 한 문제 가 생기 면 이 글 에서 빨리 해결 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기