0
BitmapImage tempBitmap = new BitmapImage(onlineImageLocation);

かなり単純なコード。OnlineImageLocation はhttp://dantonybrown.com/brownsoft/SweepyCleaner.pngを参照します

しかし、構築後のビットマップ画像には、入力されたフィールドが含まれていません。PixelWidth と PixelHeight も 0 です。

何か案は?

ダニー

4

1 に答える 1

2

例えばこのように?

    BitmapImage bmpImage = new BitmapImage(new Uri("http://dantonybrown.com/brownsoft/SweepyCleaner.png"));
    MessageBox.Show(bmpImage.PixelWidth.ToString());

それは完全に理にかなっています。画像はオンデマンドで、背景に読み込まれます。ここには複数のオプションがあります。

  1. BitmapImageをImageコントロールに割り当てます。ImageLoadedイベントが発生した後、プロパティにアクセスできます。

        BitmapImage bmpImage = new BitmapImage(new Uri("http://dantonybrown.com/brownsoft/SweepyCleaner.png"));
        bmpImage.ImageOpened += (sender, args) => Dispatcher.BeginInvoke(() => MessageBox.Show(
            bmpImage.PixelWidth.ToString(CultureInfo.InvariantCulture)));
        imageCtrl.Source = bmpImage;
    
  2. CreateOptions.Noneを使用してBitmapImageをロードします。これにより、画像は引き続きバックグラウンドで読み込まれますが、読み込みを開始する前に画像をコントロールに割り当てる必要はありません。

        BitmapImage bmpImage = new BitmapImage(new Uri("http://dantonybrown.com/brownsoft/SweepyCleaner.png"))
                                   {CreateOptions = BitmapCreateOptions.None};
        bmpImage.ImageOpened += (sender, args) => Dispatcher.BeginInvoke(() => MessageBox.Show(
            bmpImage.PixelWidth.ToString(CultureInfo.InvariantCulture)));
    
于 2012-06-07T20:17:12.770 に答える