BitmapImageオブジェクトをUWPのバイト配列に変換するにはどうすればよいですか?以前のWinRTバージョンでも簡単に実現できましたが、成功しなかったのですが、解決策の1つはanswerのようなWriteableBitmap
を使用することでしたが、現在のバージョンのUWPではWriteableBitmap BitmapImageを使用することはできません。UWPでBitmapImageをバイト配列に変換する
答えて
イメージURLから始めるので、私が把握できる唯一の方法はイメージのストリームを取得することです。これを行うには、RandomAccessStreamReference.CreateFromUri()
メソッドが本当に便利です。
Windows.Storage.Streams.IRandomAccessStream random = await Windows.Storage.Streams.RandomAccessStreamReference.CreateFromUri(new Uri("http://...")).OpenReadAsync();
次に、後で使用するためにすべてのピクセルを読み取るためにストリームをデコードする必要があります。
Windows.Graphics.Imaging.BitmapDecoder decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(random);
Windows.Graphics.Imaging.PixelDataProvider pixelData = await decoder.GetPixelDataAsync();
最後に、このような方法でピクセルバッファにアクセスできます。
byte[] bytes = pixelData.DetachPixelData();
URLを渡さずに実際のBitmapImageオブジェクト自体を変換する方法はありますか?シナリオは説明するのが難しいです... – AymenDaoudi
@AymenDaoudiグーグルでこれは不可能だと言っているMSDNのフォーラムから投稿を見つけました。もう一度見つけたらリンクを投稿しますhttps://social.msdn.microsoft.com/Forums/en-US/8974f4a4-f116-499b-ad00-e0c8a00a6494/convert-bitmapimage-to-byte?forum=winappswithcsharp – fillobotto
ええ、バイト[あまりにも複雑ではない、私はあなたがそれを得ることができると思います。私はそれがより簡単だったと思うが、そうではない。
このコードは実際にはさらに一歩進んで、(シリアル化)Base64文字列に[]バイトを変換しますが、あなたは右、その余分なステップを無視することができますか?
// using System.Runtime.InteropServices.WindowsRuntime;
private async Task<string> ToBase64(Image control)
{
var bitmap = new RenderTargetBitmap();
await bitmap.RenderAsync(control);
return await ToBase64(bitmap);
}
private async Task<string> ToBase64(WriteableBitmap bitmap)
{
var bytes = bitmap.PixelBuffer.ToArray();
return await ToBase64(bytes, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight);
}
private async Task<string> ToBase64(StorageFile bitmap)
{
var stream = await bitmap.OpenAsync(Windows.Storage.FileAccessMode.Read);
var decoder = await BitmapDecoder.CreateAsync(stream);
var pixels = await decoder.GetPixelDataAsync();
var bytes = pixels.DetachPixelData();
return await ToBase64(bytes, (uint)decoder.PixelWidth, (uint)decoder.PixelHeight, decoder.DpiX, decoder.DpiY);
}
private async Task<string> ToBase64(RenderTargetBitmap bitmap)
{
var bytes = (await bitmap.GetPixelsAsync()).ToArray();
return await ToBase64(bytes, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight);
}
private async Task<string> ToBase64(byte[] image, uint height, uint width, double dpiX = 96, double dpiY = 96)
{
// encode image
var encoded = new InMemoryRandomAccessStream();
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, encoded);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, height, width, dpiX, dpiY, image);
await encoder.FlushAsync();
encoded.Seek(0);
// read bytes
var bytes = new byte[encoded.Size];
await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length);
// create base64
return Convert.ToBase64String(bytes);
}
private async Task<ImageSource> FromBase64(string base64)
{
// read stream
var bytes = Convert.FromBase64String(base64);
var image = bytes.AsBuffer().AsStream().AsRandomAccessStream();
// decode image
var decoder = await BitmapDecoder.CreateAsync(image);
image.Seek(0);
// create bitmap
var output = new WriteableBitmap((int)decoder.PixelHeight, (int)decoder.PixelWidth);
await output.SetSourceAsync(image);
return output;
}
これは重要な部分だった:
var bytes = (await bitmap.GetPixelsAsync()).ToArray();
は、あなたがそれを文脈を見て楽しむかもしれないと思いました。
幸運のベスト。
- 1. UWP BitmapImageをWriteableBitmapに変換する
- 2. UWPのBitmapImageをUWPで変換してsqliteに挿入
- 3. PNG圧縮バイト配列をBMPバイト配列に変換する
- 4. 変換バイト配列
- 5. C#バイト配列に変換
- 6. NSStringをバイト配列に変換する
- 7. バイト配列をUIImageに変換する
- 8. バイト配列をlongに変換する
- 9. int16をバイト配列に変換する
- 10. バイト配列をpngに変換する
- 11. バイナリをバイトに変換する[]配列
- 12. D3DImageをバイト配列に変換する
- 13. JavaScriptをバイト配列に変換する
- 14. BitmapImageをsilverlight4のバイト配列に変換するにはどうすればよいですか?
- 15. C#でバイト配列をshort配列に変換する
- 16. Golangでint配列をバイト配列に変換する
- 17. 変換バイト配列 - ルビー
- 18. サンプルを含む配列をバイト配列に変換する
- 19. バイト配列を文字列に変換してバイト配列に戻す
- 20. バイト配列をint配列に変換する方法は?
- 21. バイト配列を短い配列に変換する
- 22. バイト配列のExcelファイルをバイト配列のPDFファイルに変換する
- 23. Swiftのバイト配列をUIImageに変換
- 24. 入力=ファイルをバイト配列に変換
- 25. JSONをCのバイト配列に変換
- 26. バイト配列をPNG/JPGに変換
- 27. Windows Phone 7.1:分割バイト[]イメージとBitmapImageに変換
- 28. バイト配列イメージの変換後にcore.net
- 29. Javaの文字列をバイト配列に変換するには?
- 30. バイト配列を文字列に変換するには?
どのようにBitmapImageを取得しますか? URLまたは何から? – fillobotto
@fillobotto:URLから、ウェブのURL。 – AymenDaoudi
私は空白のUWPプロジェクトで私のために働いて答えを精緻化しました – fillobotto