C# 为什么我的位图图像不显示?

C# 为什么我的位图图像不显示?,c#,winrt-xaml,bing-maps,bitmapimage,C#,Winrt Xaml,Bing Maps,Bitmapimage,根据Brundritt在回答时提到的例子,我能够在信息框中显示某些数据,如下所示: …但我没有获取作为我要显示的数据的一部分的位图图像 我的问题是为什么图像不显示,我需要做什么才能显示它们 这不是数据-我已将缩略图图像保存到SQLite数据库中,在该数据库中以字节数组的形式存储,但可以在以下位置将其视为图像: : 如您所见,字符串数据显示良好,但图像显示不好。以下是我获取的用于检索数据并显示数据的相关代码: // The class used to create the SQLite table

根据Brundritt在回答时提到的例子,我能够在信息框中显示某些数据,如下所示:

…但我没有获取作为我要显示的数据的一部分的位图图像

我的问题是为什么图像不显示,我需要做什么才能显示它们

这不是数据-我已将缩略图图像保存到SQLite数据库中,在该数据库中以字节数组的形式存储,但可以在以下位置将其视为图像:

:

如您所见,字符串数据显示良好,但图像显示不好。以下是我获取的用于检索数据并显示数据的相关代码:

// The class used to create the SQLite table
public class PhotraxBaseData
{
    [SQLite.PrimaryKey]
    [SQLite.AutoIncrement]
    public int Id { get; set; }
    . . .
    public DateTime dateTimeTaken { get; set; }
    public String filePath { get; set; }
    public Byte[] thumbnail { get; set; }
}

private async void Gener8MapMarkers(List<PhotraxBaseData> _pbd)
{
    foreach (PhotraxBaseData pbd in _pbd)
    {
        String descAndFilename = Path.GetFileName(pbd.filePath);

        if (null != pbd.imgDescription)
        {
            descAndFilename = String.Format("{0} - {1}", pbd.imgDescription, descAndFilename);
        }
        BitmapImage bmi = await PhotraxUtils.ByteArrayToBitmapImage(pbd.thumbnail);
        if (PhotraxUtils.ValidLatAndLong(pbd.latitude, pbd.longitude))
        {
            Location loc = new Location(pbd.latitude, pbd.longitude);
            AddPushpin(loc, descAndFilename, pbd.dateTimeTaken, null, DataLayer);
        }
    }
}

public static async Task<BitmapImage> ByteArrayToBitmapImage(this byte[] byteArray)
{
    // from http://dotnetspeak.com/2013/04/convert-byte-array-to-an-image-in-winrt
    if (byteArray != null)
    {
        using (var stream = new InMemoryRandomAccessStream())
        {
            await stream.WriteAsync(byteArray.AsBuffer());
            var image = new BitmapImage();
            stream.Seek(0);
            image.SetSource(stream);
            return image;
        }
    }
    return null;
}

public class PushpinMetadata
{
    public string DescAndFileName { get; set; }
    public DateTime DateTimeTaken { get; set; }
    public BitmapImage Thumbnail { get; set; }
}

public void AddPushpin(Location latlong, string descAndFileName, DateTime dateTimeTaken, BitmapImage thumbnail, MapLayer layer)
{
    Pushpin p = new Pushpin()
    {
        Tag = new PushpinMetadata()
        {
            DescAndFileName = descAndFileName,
            DateTimeTaken = dateTimeTaken,
            Thumbnail = thumbnail
        }
    };

    MapLayer.SetPosition(p, latlong);
    p.Tapped += PinTapped;
    layer.Children.Add(p);
}

private void PinTapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
    Pushpin p = sender as Pushpin;
    PushpinMetadata m = (PushpinMetadata)p.Tag;

    //Ensure there is content to be displayed
    if (!String.IsNullOrEmpty(m.DescAndFileName))
    {
        Infobox.DataContext = m;
        Infobox.Visibility = Visibility.Visible;
        MapLayer.SetPosition(Infobox, MapLayer.GetPosition(p));
    }
    else
    {
        Infobox.Visibility = Visibility.Collapsed;
    }
}
这里是我调用converter方法的地方,传递类实例的适当成员,然后添加一个图钉:

BitmapImage bmi = await PhotraxUtils.ByteArrayToBitmapImage(pbd.thumbnail);
if (PhotraxUtils.ValidLatAndLong(pbd.latitude, pbd.longitude))
{
    Location loc = new Location(pbd.latitude, pbd.longitude);
    //AddPushpin(loc, descAndFilename, pbd.dateTimeTaken, null, DataLayer);
    AddPushpin(loc, descAndFilename, pbd.dateTimeTaken, bmi, DataLayer);
}
然而:我的坏,人民

我忽略了用bmi替换我的占位符null arg,你可以看到我以前的代码在上面被注释掉了,我对AddPushpin的新工作调用在下面。图像的大小/比例都是错误的,但我认为这很容易修复

我不知道是高兴地跳还是踢自己的腿,所以我想我会同时做这两件事


感谢Dunaway先生让我更仔细地查看我的代码——这显然是我在发布之前应该做的事情。

要检查的一些事情——确保binding works检查输出窗口中的绑定错误和/或使用调试转换器,检查布局是否工作——它可能在那里,只需0大小并检查BItmapImage是否存在-查看是否可以以其他方式显示它。能否显示从数据库查询数据的代码?数据库中的列类型是什么?@FilipSkakun:我在输出中没有看到任何有趣的内容;我搜索了装订和图像,但一无所获。至于大小,XAML中的Width和Height=Auto不排除0大小的图像吗?请看我的更新-基本解决了。
public Byte[] thumbnail { get; set; }
BitmapImage bmi = await PhotraxUtils.ByteArrayToBitmapImage(pbd.thumbnail);
if (PhotraxUtils.ValidLatAndLong(pbd.latitude, pbd.longitude))
{
    Location loc = new Location(pbd.latitude, pbd.longitude);
    //AddPushpin(loc, descAndFilename, pbd.dateTimeTaken, null, DataLayer);
    AddPushpin(loc, descAndFilename, pbd.dateTimeTaken, bmi, DataLayer);
}