본문 바로가기
윈도우프로그래밍

[C#] PictureBox에 이미지 표시하기 (feat. MemoryStream)

by 바퀴 굴리는 프로그래머 2021. 5. 23.
반응형

아래 구문은 PictureBox 컨트롤에 이미지를 표시하기 위한 방법 중 가장 쉽기 때문에 일반적으로 많이 사용되는 방식이다. 하지만, 이러한 방식은 파일을 PictureBox가 점유하고 있기 때문에 삭제나 이동에 문제가 발생한다.

pictureBox.Image = Image.FromFile(file_name);

 

메모리스트림을 이용하여 로딩하면  위와 같은 문제없이 이미지를 표시할 수 있다.

pictureBox.Image = LoadBitmap(@"d:\directory\file_name.jpg");

 

/// <summary>
/// 비트맵이미지를 메모리스트림으로 로딩
/// </summary>
/// <param name="file_name"></param>
/// <returns></returns>
public Bitmap LoadBitmap(string file_name)
{
    if (System.IO.File.Exists(file_name))
    {
        // 파일을 읽기 전용으로 오픈한다.
        using (System.IO.FileStream stream = new System.IO.FileStream(file_name, System.IO.FileMode.Open, System.IO.FileAccess.Read))
        {
            // FileStream으로부터 BinaryReader를 구한다.
            using (System.IO.BinaryReader reader = new System.IO.BinaryReader(stream))
            {
                // 파일의 내용을 MemoryStream으로 복사한다.
                var memoryStream = new System.IO.MemoryStream(reader.ReadBytes((int)stream.Length));
                
                // MemoryStream을 Bitmap으로 만들어 반환한다.
                return new Bitmap(memoryStream);
            }
        }
    }
    else
    {
        MessageBox.Show("이미지를 찾을 수 없습니다.", "이미지 로딩", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        return null;
    }
}

 

 

 

반응형