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.실현 효과위 에서 이미 이 프로그램 을 실현 하 는 사고방식 을 소개 했다.친 구 는 도대체 사용자 정의 이미지 뷰 어가 어떤 모습 인지 보고 싶 어 하지 않 을 까?다음은 하나의 애니메이션 을 통 해 프로그램의 실행 효 과 를 더욱 구체 적 으로 볼 수 있 습 니 다.
소결
여기까지 이 글 의 내용 소개 가 끝 났 으 니 비슷 한 문제 가 생기 면 이 글 에서 빨리 해결 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.