0

画像をバイト配列に変換し、後で元に戻すために以下のコードを記述しますが、機能しません。誰でも助けることができますか?

FileOpenPicker picker = new FileOpenPicker();
        picker.ViewMode = PickerViewMode.Thumbnail;
        picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
        picker.FileTypeFilter.Add(".jpg");
        picker.FileTypeFilter.Add(".png");
        StorageFile file = await picker.PickSingleFileAsync();
        byte[] pixeByte;
        using (IRandomAccessStream stream = await file.OpenReadAsync())
        {
            WriteableBitmap image = new WriteableBitmap(400, 250);
            image.SetSource(stream);
            testImage.Source = image;
            BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
            BitmapTransform transform = new BitmapTransform();
            transform.ScaledWidth = 400;
            transform.ScaledHeight = 250;
            PixelDataProvider pixeldata =await decoder.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, transform, ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);
            pixeByte = pixeldata.DetachPixelData();
        }

        using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
        {
            BitmapImage image = new BitmapImage();
            await stream.WriteAsync(pixeByte.AsBuffer());
            stream.FlushAsync().AsTask().Wait();
            stream.Seek(0);
             image.SetSource(stream);
            testImage2.Source = image;
        }

解決済み:

public static async Task<byte[]> ImageToByteArrayAsync(StorageFile file)
    {
        using (IRandomAccessStream stream = await file.OpenReadAsync())
        {                
            using (DataReader reader = new DataReader(stream.GetInputStreamAt(0)))
            {
                await reader.LoadAsync((uint)stream.Size);
                byte[] pixeByte = new byte[stream.Size];
                reader.ReadBytes(pixeByte);
                return pixeByte;
            }
        }
    }

    // Convert a byte array to BitmapImage
    public static async Task<BitmapImage> ByteArrayToImageAsync(byte[] pixeByte)
    {
        using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
        {
            BitmapImage image = new BitmapImage();
            await stream.WriteAsync(pixeByte.AsBuffer());
            stream.Seek(0);
            image.SetSource(stream);
            return image;
        }
    }
4

1 に答える 1