본문 바로가기
호구지책/C/C++/C#

[C#/WPF] Image 표시하기

by 하늘의흐름 2017. 5. 28.
반응형

system.windows.controls.image 에서 이미지가 표시되지 않는다.


개발중인 프로그램에서 이미지가 표시되지 않는 문제가 발생했다.

왜 이미지가 표시가 안될까.

재미있는 건 메모리 상에는 존재하는데, 눈에 보이지 않는다는 점이다.

Visible이 자동으로 inVisible로 변하기라도 하나?


단순히 Memstream으로 불러왔을 때는 메모리 문제가 발생해서

오류가 발생했다. 이를 회피하는 방법이 필요했는데,

이미지를 다른 객체로 복사하는 방법이었다.



다음과 같은 방식으로 이미지를 복사해와서 불러왔다.


//이미지 복사 방식
// using : 리소스를 자동으로 해제해준다.
//https://stackoverflow.com/questions/13625637/c-sharp-image-from-file-close-connection
System.Drawing.Image copyPhoto;
using (var bmpTemp = new Bitmap(@imageLocalPath))
{
 copyPhoto = new Bitmap(bmpTemp);
}
 


이미지를 불러올 때, @라는 와일드카드를 사용한다. php에서 @는 경고를 따로 표시 하지 않고 생략함을 의미한다. 같은 의미로 볼 수 있을까?


문제는 이렇게 복사한 이미지가 올바르게 표시되지 않는다는 점이었다.


이미지가 비어있는 건지 다음과 같이 픽셀을 검사해보기 했지만 빈 것은 아니었다.



 
//이미지 복사 방식
 // using : 리소스를 자동으로 해제해준다.
//https://stackoverflow.com/questions/13625637/c-sharp-image-from-file-close-connection
System.Drawing.Image copyPhoto;
using (var bmpTemp = new Bitmap(@imageLocalPath))
{
  copyPhoto = new Bitmap(bmpTemp);
}



결론적으로 다음과 같은 코드가 도움이 되었다.

역시 믿고 보는 스텍오버플로우다~!



BitmapImage _image = new BitmapImage();
_image.BeginInit();
_image.CacheOption = BitmapCacheOption.None;
_image.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache);
_image.CacheOption = BitmapCacheOption.OnLoad;
_image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
_image.UriSource = new Uri(@"Y:/screenshots/naratco08-0-0-screenshot.png", UriKind.RelativeOrAbsolute);
_image.EndInit();
ScreenAtco01Image.Source = _image;
 


출처

https://stackoverflow.com/questions/1491383/reloading-an-image-in-wpf/1491655#1491655


반응형

댓글