Home Full Site
PictureBox 컨트롤

PictureBox 컨트롤은 그림을 보여주는 컨트롤이다. 그림은 외부 파일, 리소스 파일 혹은 데이타베이스 등에서 가져올 수 있다. PictureBox 컨트롤의 Image 라는 속성에 이미지 데이타를 할당하면 화면에 그림을 보여준다. PictureBox 컨트롤의 또 하나의 중요한 속성은 그림을 보여주는 스타일을 나타내는 속성인 SizeMode인데, 이 속성은 AutoSize, CenterImage, Normal (디폴트), StretchImage, Zoom 등 5가지 스타일 중 하나를 설정하게 된다



PictureBox 컨트롤 사용

아래 예제 그림에서 [Load Image] 버튼을 누르면, 그림파일로부터 이미지를 로드하여 이를 PictureBox의 Image 속성에 할당하고 그림을 보여주게 된다. Bitmap클래스의 FromFile() 메서드는 외부 파일을 읽어와서 이미지를 만드는 메서드이다.

그리고 그림을 클릭하게 되면 실행되는 pictureBox1_Click 이벤트핸들러는 SizeMode 속성을 변경해서 그림이 다르게 보이는 역활을 한다.


예제

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void btnLoad_Click(object sender, EventArgs e)
    {
        pictureBox1.Image = Bitmap.FromFile("SpaceNeedle.bmp");
    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        if (pictureBox1.SizeMode == PictureBoxSizeMode.Zoom)
        {
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        }
        else
        {
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
        }
    }
}


PictureBox 컨트롤


PictureBox 이미지 저장

PictureBox 컨트롤에 있는 이미지를 파일로 저장하기 위해서는 PictureBox.Image 속성을 Bitmap 클래스로 캐스팅하여 Bitmap.Save() 메서드를 사용하면 된다 (아래 예제(A) 참조). Bitmap.Save() 메서드는 이미지를 BMP, Gif, Jpeg, Png, Tiff 등 다양한 방법으로 저장할 수 있다.

만약 파일이 아니라 외부로 송신하거나 데이타베이스 등에 저장한다면, 이미지를 바이트 배열로 변환할 필요가 있다. 이미지를 바이트 배열로 변환하기 위해 ImageConverter 클래스의 ConvertTo() 메서드를 아래와 같이 사용할 수 있다 (예제(B) 참조).


예제

// 예제(A): 이미지 파일로 저장
Bitmap bmp = (Bitmap)pictureBox1.Image;
bmp.Save("output.png", ImageFormat.Jpeg);


// 예제(B): 이미지를 byte[] 로 변경
ImageConverter converter = new ImageConverter();
imageBytes = (byte[])converter.ConvertTo(pictureBox1.Image, typeof(byte[]));



이미지 Clip

이미지를 특정 모양으로 잘라내기 위하여 이미지 Clip 기능을 사용할 수 있다. 먼저 소스이미지와 동일한 크기의 타겟이미지를 생성한 후, 타겟이미지 객체로부터 Graphics 객체를 얻어온다. 다음 타겟이미지 전체를 배경색으로 칠한 후, Graphics의 SetClip() 메서드를 써서 원모양으로 클립 자르기 영역을 설정한다. 마지막으로 Graphics의 DrawImage() 메서드를 사용하여 소스이미지를 타겟이미지로 옮기면 된다. 아래 예제는 이미지를 원형으로 잘라낸 예이다.

예제

// // 소스이미지 가져오기
var src = (Bitmap)Bitmap.FromFile("emma.png");

// 소스이미지 크기와 동일한 타겟이미지 생성
Bitmap tgt = new Bitmap(src.Width, src.Height);

// 타겟이미지의 Graphics 객체 얻기        
using (Graphics g = Graphics.FromImage(tgt))
{
    // 배경색을 설정
    var rect = new Rectangle(0, 0, tgt.Width, tgt.Height);
    using (Brush br = new SolidBrush(SystemColors.Control))
    {
        g.FillRectangle(br, 0, 0, tgt.Width, tgt.Height);
    }

    // 원모양으로 Clip
    GraphicsPath path = new GraphicsPath();
    path.AddEllipse(0, 0, tgt.Width, tgt.Height);
    g.SetClip(path);
    
    // 소스이미지를 원모양으로 잘라 타겟이미지에 출력
    g.DrawImage(src, 0, 0);                
}

// PictureBox에 이미지 출력
pictureBox1.Image = tgt;


윈폼 이미지 클립


© csharpstudy.com