私のアプリケーションでは、ユーザーが ContactPicker を使用して連絡先から人を追加できるようにしています。
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);
私の Byte[] は空ではありません (約 10000 バイト)
しかし、Converter Byte[] to 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;
}
誰かが何が問題なのか知っていれば...
前もって感謝します。ネオクリプト
編集:私はすでにコンバーターを別のプロジェクトで使用しており、うまく機能しています。主な違いは、ストリームのオリジンが同じではないことです。
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
}