在我的应用程序中,我允许用户使用ContactPicker添加联系人。将IRandomAccessStreamWithContentType转换为字节[]
我尝试转换IRandomAccessStreamWithContentType为byte []
IRandomAccessStreamWithContentType stream = await contactInformation.GetThumbnailAsync();
if (stream != null && stream.Size > 0)
{
Byte[] bytes = new Byte[stream.Size];
await stream.ReadAsync(bytes.AsBuffer(), (uint)stream.Size, Windows.Storage.Streams.InputStreamOptions.None);
我的字节[]不为空(约10000字节)
但是,当我用我的转换字节[]到ImageSource的,在BitmapImage的宽度和高度为0。
我用这个转换器的另一个应用程序,并提前工作的伟大...
public object Convert(object value, Type targetType, object parameter, string language)
{
try
{
Byte[] bytes = (Byte[])value;
if (bytes == null)
return (new BitmapImage(new Uri((String)parameter)));
BitmapImage bitmapImage = new BitmapImage();
IRandomAccessStream stream = this.ConvertToRandomAccessStream(new MemoryStream(bytes));
bitmapImage.SetSource(stream);
return (bitmapImage);
}
catch
{
return (new BitmapImage(new Uri((String)parameter)));
}
}
private IRandomAccessStream ConvertToRandomAccessStream(MemoryStream memoryStream)
{
var randomAccessStream = new InMemoryRandomAccessStream();
var outputStream = randomAccessStream.GetOutputStreamAt(0);
outputStream.AsStreamForWrite().Write(memoryStream.ToArray(), 0, (Int32)memoryStream.Length);
return randomAccessStream;
}
如果有人知道是什么问题...
感谢。 NeoKript
编辑:我已经在另一个项目中使用了我的转换器,它工作的很好。 的主要区别是,流具有不一样的原产:
var reader = await file.OpenReadAsync();
using (DataReader dataReader = new DataReader(reader))
{
var bytes = new byte[reader.Size];
await dataReader.LoadAsync((uint)reader.Size);
dataReader.ReadBytes(bytes);
// Use of bytes
}
感谢您的回答。 字节不为空,但图片不显示。 我已经在另一个项目中使用了我的转换器,它工作的很好。 不同之处在于字节数组是按照问题描述得到的。 – Geotinc 2013-03-11 17:51:47
@NeoKript我终于得到了位图创建代码的工作。不过,我必须避免使用转换器。无论如何,这是一个更好的做法,因为您可以肯定,“Bitmap”只会创建一次。 – 2013-03-12 06:07:50
我按照您的描述更改我的代码。现在它工作正常。 非常感谢。最好的问候, NeoKript – Geotinc 2013-03-12 20:22:15