[C#, .Net] PictureBox 에 URL 이미지 주소 사용하기
C# 2008. 1. 6. 16:23 |위와 같이 iis 쪽에 해당 이미지가 있다고 했을때 Winform 쪽에 PictureBox에 이미지를 Url 로 추가 하면 안되는거 같다.( 바로 적용이 가능한지 아시는분은 답변 부탁 ^^)
그래서 웹 브라우져 컨트롤을 써자니 좀 이상해서 PictureBox에 사용하기 위해서는 원격 주소에 있는 데이터를 클라이언트로 가져와야 하는걸 알았다.
이때 두가지 경우가 있는데 스트림, 파일 이 있다. 파일 보다는 스트림이 나을거 같아서 이것을 채택 했다.
그리고 위의 소스를 보면 아시겠지만 DB의 정보를 가져 와서 보여 주는 뷰어로 사용할려다 보니 DataSet와 연동을 하였다.
icon_img 정보를 가져 와서 iis의 주소에 맵핑 해서 해당 이미지를 보여 주도록 하였다.
그래서 바인딩 부분에서 몇가지 수정이 필요하다.
PictureBox에 바인딩이 있다고 가정한다.
Binding binding = icon_imgPictureBox.DataBindings["Image"];
binding.Format += new ConvertEventHandler(binding_Format);
위와 같이 Format 이벤트를 하나 생성한다.
그리고 아래와 같이 작성합니다.
void binding_Format(object sender, ConvertEventArgs e)
{
if (e.Value != null)
{
try
{
//e.Value에 있는 값을 사용해서 파일 경로를 생성한다.
string filepath = "http://local:8888/Icon/2000/" + e.Value + ".gif";
// WebClient 객체를 생성해서 스트림을 가져 오도록 한다.
WebClient client = new WebClient();
byte[] myDataBuffer = client.DownloadData(filepath);
// Stream 값을 가져 온다.
Stream stream = new MemoryStream();
stream.Write(myDataBuffer, 0, myDataBuffer.Length);
// PictureBox에 스트림으로 로드 한다.
this.icon_imgPictureBox.Image = Image.FromStream(stream, true);
}
catch (WebException webex)
{
}
}
}
try, catch 를 사용한 이유는 e.Value 에 값이 파일 이름이 아닌 다른 정보가 들어 오는 경우가 있다. 그래서 catch로 넘기도록 해서 에러를 없애도록 한다.