crop - 해당되는 글 1건

1.Introduction

 

이번 아티글에서는 이미지 객체를 다루는 예제를 살펴 보려한다. 오늘 실습할 작업은 두가지 이다. 이미지를 메모리로 읽어와서 이미지의 특정 영역만 잘라서 저장을 하는 작업과 특정 퍼센트로 이미지 크기를 조절해보는 작업을 해보도록 하겠다.

 

2.Percent Adjust Code

 

먼저 원본 이미지를 읽어서 늘려서 저장을 해보고 줄여서 저장을 해보는 작업을 먼저 해보도록 하겠다.
 

[Main함수]

static void Main(string[] args)

{

        //원본이미지및 디렉토리 설정

        string Directory = @"img";

        Image imgPrettyGirl = Image.FromFile(Directory + @"Girl.jpg");

        Image imgSavePhoto = null;

        //퍼센트로 줄이기 : 250% 늘리기

        imgSavePhoto = ScaleByPercent(imgPrettyGirl, 250);

        imgSavePhoto.Save(Directory + @"ResizeImgPercentageImg1.jpg", ImageFormat.Jpeg);

        imgSavePhoto.Dispose();

        //퍼센트로 줄이기 : 50% 줄이기

        imgSavePhoto = ScaleByPercent(imgPrettyGirl, 50);

        imgSavePhoto.Save(Directory + @"ResizeImgPercentageImg1.jpg", ImageFormat.Jpeg);

        imgSavePhoto.Dispose();

}

 


메인 함수를 살펴보자. imgPrettyGirl 객체 만들고 지정경로에서 원본이미지를 읽어 오게 된다. 그리고 ScaleByPercent라는 함수를 호출한다. 이제 ScaleByPercent() 함수를 살펴 보도록 하자.
 

/// <summary>

/// 퍼센트로 줄이기

/// </summary>

/// <param name="imgPhoto">사진 객체</param>

/// <param name="Percent">퍼센트</param>

/// <returns>수정된 Image</returns>

static Image ScaleByPercent(Image imgPhoto, int Percent)

{

        //퍼센트 0.8 or 0.5 ..

        float nPercent = ((float)Percent/100);

        //넓이와 높이

        int OriginalWidth = imgPhoto.Width;

        int OriginalHeight = imgPhoto.Height;

        //소스의 처음 위치

        int OriginalX = 0;

        int OriginalY = 0;

        //움직일 위치

        int adjustX = 0;

        int adjustY = 0;

        //조절될 퍼센트 계산

        int adjustWidth  = (int)(OriginalWidth * nPercent);

        int adjustHeight = (int)(OriginalHeight * nPercent);

        //비어있는 비트맵 객체 생성

        Bitmap bmPhoto = new Bitmap(adjustWidth, adjustHeight, PixelFormat.Format24bppRgb);

        //이미지를 그래픽 객체로 만든다.

        Graphics grPhoto = Graphics.FromImage(bmPhoto);

        //사각형을 그린다.

        //그릴 이미지객체 크기, 그려질 이미지객체 크기

        grPhoto.DrawImage(imgPhoto,

               new Rectangle(adjustX,adjustY,adjustWidth,adjustHeight),

               new Rectangle(OriginalX,OriginalY,OriginalWidth,OriginalHeight),

               GraphicsUnit.Pixel);

        grPhoto.Dispose();

        return bmPhoto;

}

 


주석을 정말 자세하게 달아 보았다. 특별히 설명할 코드느 없어 보인다. 중요한건 편집 되어져가는 흐름은 알아 두어야 한다. 먼저 이미지 비트맵(빈종이)을 생성하게 되고 그 위에 Graphic객체를 이용하여 원본이미지를 붙여 넣게 되는 흐름인 것이다.

 

3.Image Crop Code
 

이번에는 원본 이미지에 특정 영역을 잡아서 저장하는 작업을 살펴보자.

[메인함수]

static void Main(string[] args)

{

        //원본이미지및 디렉토리 설정

        string Directory = @"img";

        Image imgPrettyGirl = Image.FromFile(Directory + @"Girl.jpg");

        Image imgSavePhoto = null;

        //자 르 기

        imgSavePhoto = Crop(imgPrettyGirl, 100,150,0,0);

        imgSavePhoto.Save(Directory + @"ResizeImgMvpGirl.jpg", ImageFormat.Jpeg);

        imgSavePhoto.Dispose();

}


위의 메인 함수에서 역시 Crop이라는 메소드를 호출하고 있다. 그리고 특정영역 부분의 정보 역시 같이 보내고 있다. 그럼 Crop메서드는 어떻게 구현되어져 있는지 살펴 보도록 하자.
 

/// <summary>

/// 특정 위치의 이미지를 자른다.

/// </summary>

/// <param name="imgPhoto">이미지 사진</param>

/// <param name="Width">넓이</param>

/// <param name="Height">높이</param>

/// <param name="adjustX">X축 시작점</param>

/// <param name="adjustY">Y축 시작점</param>

/// <returns></returns>

static Image Crop(Image imgPhoto, int Width, int Height,int adjustX, int adjustY)

{

        //비트맵 종이한장 만들기

        Bitmap bmPhoto = new Bitmap(Width-adjustX, Height-adjustY, PixelFormat.Format24bppRgb);

        //그래픽 이미지 설정

        Graphics grPhoto = Graphics.FromImage(bmPhoto);

        int OriginalWidth = imgPhoto.Width;

        int OriginalHeight = imgPhoto.Height;

        //싹뚝 자르기

        grPhoto.DrawImage(imgPhoto,

               new Rectangle(0,0,Width,Height),

               new Rectangle(adjustX,adjustY,Width,Height),

               GraphicsUnit.Pixel);

 

        grPhoto.Dispose();

        return bmPhoto;

}


오히려 Crop메서드가 훨씬 짧고 간결하게 구현 되어져 있다. 솔직히 이 메서드는 하는일이 별로 없다. 코드 안에 있는 DrawImage라는 메서드만 눈여겨 보면 된다. DrawImage는 30개 이상의 오버로드를 제공한다. 그렇기 때문에 기능도 많고 내가 하고자 하는 작업을 선택해 내기도 까다롭다. 그렇기 때문에 각자가 msdn을 보면서 작업을 해 나가야 할 것이다.
저작자 표시
신고
Trackback 0 | Comment 0

강군v's Blog is powered by Daum & tistory

 

티스토리 툴바