2011-03-17 24 views
1

如果我取消對註釋行的註釋,下面的代碼將只顯示我的位圖的大小(處理需要)。這似乎沒有權利去做事情,但這是我迄今爲止提出的所有工作。我不想將位圖顯示爲UI元素中的圖像,我只想處理它。如何在Silverlight中加載BitmapImage進行處理?

BitmapImage bmpi; 

    public MainPage() 
    { 
     InitializeComponent(); 
     Loaded += new RoutedEventHandler(MainPage_Loaded); 
    } 

    void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     bmpi = new BitmapImage(new Uri("multicolor.png", UriKind.Relative)); 

     //Image img = new Image(); 
     //img.Source = bmpi; 
     //LayoutRoot.Children.Add(img); 
     //LayoutRoot.Children.Clear(); 

     MessageBox.Show(bmpi.PixelWidth.ToString()); 
    } 

回答

2

要加載圖像的前期,需要設置CreateOptions爲無的默認值,DelayCreation。
然後,您可以在ImageOpened事件中獲取寬度。

void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     bmpi = new BitmapImage(); 
     bmpi.CreateOptions = BitmapCreateOptions.None; 
     bmpi.ImageOpened += new EventHandler<RoutedEventArgs>(bmpi_ImageOpened); 
     bmpi.UriSource = new Uri("multicolor.png", UriKind.RelativeOrAbsolute); 
    } 

    void bmpi_ImageOpened(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show(bmpi.PixelWidth.ToString()); 
    } 
+0

沒有運氣,還需要將其加載到UI元素,以獲得ImageOpened事件觸發 – descf 2011-03-17 19:36:02

+0

那奇怪 - 我沒有。你正在運行SL4嗎? – foson 2011-03-17 19:37:33

+0

是的(一些額外的字符組成的評論) – descf 2011-03-17 20:34:57