7

ちょっと銀色のAPIを使用しているWindows Phone 8.1アプリがあります。 私はブロブの収納箱からこのイメージをダウンロードしています。URLからimagebrush、bitmap、およびwriteablebitmapを作成する

Image to be downloaded

画像は、このようなリンクから来ている:https://[service].blob.core.windows.net/[imagename].pngと画像だけでURIを使用して、複数のブラウザでshownedしてダウンロードすることができます。

私は今blobstorageからimageuriに基づいてimagebrushとしてこれを使用する:myOnlineImageが正しく作成されていない

// If we have a returned SAS. 
       BitmapImage myOnlineImage = new BitmapImage(); 
       myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute); 
       //ImageOnlineTest.Source = myOnlineImage; 
       var imageBrush = new ImageBrush 
       { 
        ImageSource = myOnlineImage, 
        Stretch = Stretch.None 
       }; 
       var source = FindChildShieldCanvas(CanvasImage, imageBrush); 

       WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage); 
       ImageOnlineTest.Source = wbm; 

、少なくとも私はwriteablebitmapimageに画像を変換することはできません(nullの例外を取得変換から)、さらに画像ブラシが空である、すなわちヌルである。しかし、私が知っている限り、これはそれを行う方法ですか?

のでbasicly

はどのようにして、HTTPSサイトのURLに基​​づいてimagebrushを作成するのですか?

答えて

4

私は問題を自分で解決することになった:

両方imagebrushとwriteablebitmap

3

イメージからビットマップを作成するには、URLを設定する前にビットマップオブジェクトの初期化を開始する必要があります。

BitmapImage myOnlineImage = new BitmapImage(); 
    myOnlineImage.BeginInit(); 
    myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute); 
    myOnlineImage.EndInit(); 

    var imageBrush = new ImageBrush 
    { 
     ImageSource = myOnlineImage, 
     Stretch = Stretch.None 
    }; 
    var source = FindChildShieldCanvas(CanvasImage, imageBrush); 

    WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage); 
    ImageOnlineTest.Source = wbm; 
+0

ありがとうございます。 'BeginInit'と' EndInit'のようなものがWindows Phone 8.1のsilverlightで利用できないようですか? – JTIM

+0

ドキュメントを見ると、「BitmapImageはImageOpenedイベントが発生するまで使用できません。あなたはSetSourceメソッドに正常に切り替えたようですが。 –

+0

イベントやその他のイベントを聞くなど、さまざまなことを試しましたが、正しく動作していないようです:/ – JTIM

1

のためにあなたがC#のでそれを行うことができ、このコードが動作するusing System.Runtime.InteropServices.WindowsRuntime;

// If we have a returned SAS. 
       BitmapImage myOnlineImage = new BitmapImage(); 

       //myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute); 
       using (var webCLient = new Windows.Web.Http.HttpClient()) 
       { 
        webCLient.DefaultRequestHeaders.Add("User-Agent", "bot"); 
        var responseStream = await webCLient.GetBufferAsync(new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute)); 
        var memoryStream = new MemoryStream();//responseStream.ToArrayAsStream().ReadAsync()); 

        memoryStream.Write(responseStream.ToArray(), 0, responseStream.ToArray().Length); 
        memoryStream.Position = 0; 
        myOnlineImage.SetSource(memoryStream); 

       } 
       //ImageOnlineTest.Source = myOnlineImage; 
       var imageBrush = new ImageBrush 
       { 
        ImageSource = myOnlineImage, 
        Stretch = Stretch.None 
       }; 
       var source = FindChildShieldCanvas(CanvasImage, imageBrush); 

       WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage); 

を追加することを忘れないでください次のように、適切なコードをフィールドに置き換えます。

Rectangle rectangle = new Rectangle(); 
rectangle.StrokeThickness = 10; 
rectangle.Height = 200; 
rectangle.Width = 100; 
rectangle.SetValue(Canvas.LeftProperty, 100d); 
rectangle.SetValue(Canvas.TopProperty, 100d); 
rectangle.Fill = new ImageBrush(new BitmapImage(new Uri(@"C:\User\xiaorui.dong\Pictures\profile.jpeg"))); 
+0

はい!類似のコード私のために働いた –

+0

私は星でこれを試みたが、成功なし。私の質問は、これが8.1のSilverlightプロジェクトか、どんなプロジェクトタイプで行われたかです。 – JTIM

関連する問題