코드에서 WPF 이미지의 소스를 설정하려고합니다. 이미지는 프로젝트에서 리소스로 포함됩니다. 예제를 보면서 아래 코드를 생각해 냈습니다. 어떤 이유로 든 작동하지 않습니다-이미지가 표시되지 않습니다.
디버깅하여 스트림에 이미지 데이터가 포함되어 있음을 알 수 있습니다. 무슨 일이야?
Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;
아이콘은 다음과 같이 정의됩니다. <Image x:Name="_icon" Width="16" Height="16" />
답변
당신과 같은 문제를 겪고 약간의 독서를 한 후에 솔루션 팩 URI를 발견했습니다 .
코드에서 다음을 수행했습니다.
Image finalImage = new Image();
finalImage.Width = 80;
...
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png");
logo.EndInit();
...
finalImage.Source = logo;
또는 다른 BitmapImage 생성자를 사용하여 더 짧게 만듭니다.
finalImage.Source = new BitmapImage(
new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png"));
URI는 여러 부분으로 나뉩니다.
- 권위:
application:///
-
경로 : 참조 된 어셈블리로 컴파일 된 리소스 파일의 이름입니다. 경로는 다음 형식을 따라야합니다.
AssemblyShortName[;Version][;PublicKey];component/Path
- AssemblyShortName : 참조 된 어셈블리의 짧은 이름입니다.
- ; Version [선택 사항] : 리소스 파일이 포함 된 참조 된 어셈블리의 버전입니다. 짧은 이름이 동일한 둘 이상의 참조 된 어셈블리가로드 될 때 사용됩니다.
- ; PublicKey [선택 사항] : 참조 된 어셈블리에 서명하는 데 사용 된 공개 키. 짧은 이름이 동일한 둘 이상의 참조 된 어셈블리가로드 될 때 사용됩니다.
- ; component : 참조되는 어셈블리가 로컬 어셈블리에서 참조되도록 지정합니다.
- / 경로 : 참조 된 어셈블리 프로젝트 폴더의 루트에 상대적인 경로를 포함한 리소스 파일의 이름.
세 개의 슬래시는 이후 application:
에 쉼표로 교체해야합니다.
참고 : 팩 URI의 권한 구성 요소는 패키지를 가리키는 임베디드 URI이며 RFC 2396을 준수해야합니다. 또한 “/”문자는 “,”문자 및 “%”와 같은 예약 문자로 바꿔야합니다. “?” 탈출해야합니다. 자세한 내용은 OPC를 참조하십시오.
물론 이미지의 빌드 작업을로 설정했는지 확인하십시오 Resource
.
답변
var uriSource = new Uri(@"/WpfApplication1;component/Images/Untitled.png", UriKind.Relative);
foo.Source = new BitmapImage(uriSource);
그러면 “WpfApplication1″이라는 어셈블리에서 “Build Action”이 “Resource”로 설정된 “Images”폴더에 “Untitled.png”라는 이미지가로드됩니다.
답변
이것은 약간 적은 코드이며 한 줄로 수행 할 수 있습니다.
string packUri = "pack://application:,,,/AssemblyName;component/Images/icon.png";
_image.Source = new ImageSourceConverter().ConvertFromString(packUri) as ImageSource;
답변
아주 쉽게:
메뉴 항목의 이미지를 동적으로 설정하려면 다음을 수행하십시오.
MyMenuItem.ImageSource =
new BitmapImage(new Uri("Resource/icon.ico",UriKind.Relative));
“icon.ico”는 어디에나있을 수 있으며 (현재 ‘Resources’디렉토리에 위치) Resource로 링크되어야합니다.
답변
이것을 한 줄로 줄일 수도 있습니다. 이것은 기본 창에 아이콘을 설정하는 데 사용한 코드입니다. .ico 파일이 내용으로 표시되어 출력 디렉토리로 복사되고 있다고 가정합니다.
this.Icon = new BitmapImage(new Uri("Icon.ico", UriKind.Relative));
답변
가장 간단한 방법 :
var uriSource = new Uri("image path here");
image1.Source = new BitmapImage(uriSource);
답변
시도해 보셨습니까?
Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = iconStream;
bitmap.EndInit();
_icon.Source = bitmap;