0

サムネイルを含むニュースリストがあります:

例

サーバーからJSONを取得しています。つまり、写真は-リンクです

写真を挿入するための私のコード:

foreach (Article article in NewsList.Result.Articles)
{
    NewsListBoxItem NLBI = new NewsListBoxItem();
    NLBI.Title.Text = article.Title;
    NLBI.Date.Text = US.UnixDateToNormal(article.Date.ToString());
    NLBI.id.Text = article.Id.ToString();
    if (article.ImageURL != null)
    {
        BitmapImage image = new BitmapImage(new Uri(article.ImageURL));
        NLBI.Thumbnail.Source = image;
    }
    NewsListBox.Items.Add(NLBI);
}

オフライン モードでアプリケーションに入ると、それらは表示されないので、最も好ましい方法である文字列として保存する必要があります。

つまり、それらを Base64 に変換する必要があります。

BitmapImage image = new BitmapImage(new Uri(article.ImageURL));
byte[] bytearray = null;
using (MemoryStream ms = new MemoryStream())
{
    WriteableBitmap wbitmp = new WriteableBitmap(image );
    wbitmp .SaveJpeg(ms, wbitmp.PixelWidth, wbitmp.PixelHeight, 0, 100);
    ms.Seek(0, SeekOrigin.Begin);
    bytearray = ms.GetBuffer();
}
string str = Convert.ToBase64String(bytearray);

NullReferenceException私の間違いはどこですか ? コードはオンラインで失敗します:

WriteableBitmap wbitmp = new WriteableBitmap(image);

エラー:

タイプ 'System.NullReferenceException' の例外が System.Windows.ni.dll で発生しましたが、ユーザー コードでは処理されませんでした

私は自分のプロジェクトからこの画像を使用しようとさえしました:

BitmapImage image = new BitmapImage(new Uri("Theme/MenuButton.png",UriKind.Relative)); 

しかし、NullRef ではまだ失敗しますが、画像が存在することはわかっています。画像が nul の場合、ImageBox には表示されません

4

1 に答える 1

0

問題は、画像をロードする必要があることです。最初に画像が表示されたときに画像を保存してみてください。

foreach (Article article in NewsList.Result.Articles)
{
    NewsListBoxItem NLBI = new NewsListBoxItem();
    NLBI.Title.Text = article.Title;
    NLBI.Date.Text = US.UnixDateToNormal(article.Date.ToString());
    NLBI.id.Text = article.Id.ToString();
    if (article.ImageURL != null)
    {
        BitmapImage image = new BitmapImage(new Uri(article.ImageURL));
        image.ImageOpened += (s, e) =>
            {
                byte[] bytearray = null;
                using (MemoryStream ms = new MemoryStream())
                {
                    WriteableBitmap wbitmp = new WriteableBitmap(image );
                    wbitmp .SaveJpeg(ms, wbitmp.PixelWidth, wbitmp.PixelHeight, 0, 100);
                    bytearray = ms.ToArray();
                }
                string str = Convert.ToBase64String(bytearray);
            };
        NLBI.Thumbnail.Source = image;
    }
    NewsListBox.Items.Add(NLBI);
}
于 2013-07-26T09:30:32.410 に答える