在我的應用程序中,我允許用戶使用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