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