image - 해당되는 글 2건
        /// <summary>
        /// URL에 해당하는 웹페이지의 이미지를 가져온다.
        /// </summary>
        /// <param name="URL">가져오고자 하는 URL</param>
        /// <returns>해당 웹페이지의 이미지</returns>
        public Bitmap getImageFromURL(String URL)
        {
            // WebBrowser를 생성하고 자동으로 Dispose해주기 위해 Using Keyword를 사용
            using (WebBrowser WebBrowser = new WebBrowser())
            {
                // 캡쳐될 화면에 스크롤바를 포함시키지 않을것이므로.
                WebBrowser.ScrollBarsEnabled = false;
                WebBrowser.TabStop = false;

                try
                {
                    Bitmap Result = null;   // 웹페이지 이미지가 저장될공간

                    // 웹페이지가 모두 로드가 되었을때 발생하는 이벤트.
                    // 간단하게 함수하나로 해결하기 위해 인라인 Delegate를 사용
                    WebBrowser.DocumentCompleted +=
                        delegate(object sender, WebBrowserDocumentCompletedEventArgs e)
                    {
                        // WebBrowser가 정말로 Complate되었는지 확인하기 위함
                        if (WebBrowser.ReadyState != WebBrowserReadyState.Complete) return;

                        // 문서의 크기만큼 웹브라우저의 크기를 조절 (스크롤바 안생기게하려고)
                        int ScrollWidth = WebBrowser.Document.Body.ScrollRectangle.Width;
                        int ScrollHeight = WebBrowser.Document.Body.ScrollRectangle.Height;
                        Size PageSize = new Size(ScrollWidth, ScrollHeight);
                        WebBrowser.Size = PageSize;

                        // 문서 크기만큼의 이미지를 생성
                        Result = new Bitmap(PageSize.Width, PageSize.Height);

                        // 위에서 생성한 이미지에 WebBrowser Rendering (.Net 2.0이상에서만 지원)
                        WebBrowser.DrawToBitmap(Result, new Rectangle(Point.Empty, PageSize));

                    };

                    // 요청한 URL로 이동
                    WebBrowser.Navigate(URL);

                    // Result에 데이터가 들어올때 까지 대기후 리턴
                    while (Result == null) Application.DoEvents();

                    
                    return Result;

                }
                catch (Exception)
                {
                    return null;
                }
            }
        }
저작자 표시
신고
Trackback 0 | Comment 0

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

 

티스토리 툴바