[.net] 在代碼中設置WPF圖像源



7 Answers

var uriSource = new Uri(@"/WpfApplication1;component/Images/Untitled.png", UriKind.Relative);
foo.Source = new BitmapImage(uriSource);

這會在名為“WpfApplication1”的程序集中將其“Build Action”設置為“Resource”的名為“Images”的文件夾中加載名為“Untitled.png”的圖像。

Question

我試圖在代碼中設置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" />




如何從嵌入資源圖標和圖像中加載圖像(Arcturus的更正版本)

假設你想添加按鈕與圖像。 你該怎麼辦?
1.添加到項目文件夾圖標,並放在這裡圖片ClickMe.png
2.在'ClickMe.png'屬性中將'BuildAction'設置為'Resource'
假設你編譯的程序集名稱是'Company.ProductAssembly.dll'
4.現在是時候在Xaml中加載我們的圖像了

<Button Width="200" Height="70">
  <Button.Content>
    <StackPanel>
      <Image Width="20" Height="20">
        <Image.Source>
          <BitmapImage UriSource="/Company.ProductAssembly;component/Icons/ClickMe.png"></BitmapImage>
          </Image.Source>
      </Image>
      <TextBlock HorizontalAlignment="Center">Click me!</TextBlock>
    </StackPanel>
  </Button.Content>
</Button>

DONE




這是我的方式

internal static class ResourceAccessor
{
    public static Uri Get(string respurcePath)
    {
        var uri = string.Format(
            "pack://application:,,,/{0};component/{1}"
            , Assembly.GetExecutingAssembly().GetName().Name
            , respurcePath
        );

        return new Uri(uri);
    }
}

用途:

new BitmapImage(ResourceAccessor.Get("Images/1.png"))



將框架置於VisualBrush中:

VisualBrush brush = new VisualBrush { TileMode = TileMode.None };


brush.Visual = frame;

brush.AlignmentX = AlignmentX.Center;
brush.AlignmentY = AlignmentY.Center;
brush.Stretch = Stretch.Uniform;

將VisualBrush放入GeometryDrawing中

GeometryDrawing drawing = new GeometryDrawing();

drawing.Brush = brush;

//Brush this in 1, 1 ratio
RectangleGeometry rect = new RectangleGeometry { Rect = new Rect(0, 0, 1, 1) };
drawing.Geometry = rect;

現在把GeometryDrawing放在一個DrawingImage中:

new DrawingImage(drawing);

把它放在你的圖像源上,等等!

你可以做得更容易,但是:

<Image>
    <Image.Source>
        <BitmapImage UriSource="/yourassembly;component/YourImage.PNG"></BitmapImage>
    </Image.Source>
</Image>

在代碼中:

BitmapImage image = new BitmapImage {UriSource =“/ yourassembly; component / YourImage.PNG”};

HTH




你有沒有嘗試過:

Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = iconStream;
bitmap.EndInit();
_icon.Source = bitmap;



如果你已經有一個流,並知道格式,你可以使用這樣的東西:

static ImageSource PngStreamToImageSource (Stream pngStream) {
    var decoder = new PngBitmapDecoder(pngStream,
        BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    return decoder.Frames[0];
}



好簡單:

要動態設置菜單項的圖像,只需執行以下操作:

MyMenuItem.ImageSource = 
    new BitmapImage(new Uri("Resource/icon.ico",UriKind.Relative));

...而“icon.ico”可以位於任何地方(目前它位於“資源”目錄中),並且必須鏈接為資源...




還有一種更簡單的方法,如果圖像在xaml中作為資源加載,並且所討論的代碼是該xaml的代碼隱藏

Uri iconUri = new Uri("pack://application:,,,/ImageNAme.ico", UriKind.RelativeOrAbsolute);
NotifyIcon.Icon = BitmapFrame.Create(iconUri);

關心Bharat Thanki






Related



Tags

.net .net   wpf   image