Вопрос по c#, windows-runtime – Как сохранить BitmapImage WinRT

3

У меня есть BitmapImage:

BitmapImage image = new BitmapImage();
image.SetSource(memStream);

Я хочу сохранить образ на диск, чтобы увидеть в будущем. Я не могу найти рабочий пример того, как это сделать? Второй вопрос Мне нужно получить цвет пикселя (например:Color cl=image.GetColorPixel(X,Y)), Как мне это сделать? Спасибо!

Просьба пометить сообщение как решение или указать, что вы наконец сделали Boas Enkler

Ваш Ответ

5   ответов
1

BitmapImage, Вам нужно использоватьWriteableBitmap вместо. Если у вас действительно нет выбора, кроме как начать с BitmapImage - проверьте егоUriSource свойство либо снова загрузить то же изображение, либо загрузитьWriteableBitmap с тем же содержанием, что и стартовыйBitmapImage, Обратите внимание, чтоUriSource может быть нулевым в некоторых случаях - даже еслиBitmapImage был загружен путем предоставления ему URI - он может быть сброшен вручную илиустановкаCacheMode вBitmapCache наImage что использует данныйBitmapImage как егоSource.

0

показывающий некоторые манипуляции с WriteableBitmaphttp://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.imaging.writeablebitmap.aspx

Пример - чтение, но писать не должно быть сложно.

Чтобы перебрать пиксели, взгляните на свойство PixelData.

4

который я нашел некоторое время назад в сети. Я не уверен, но если я правильно помню, это было из примеров SDK или WinRt блог

Все сводится к изображению WritabelBitmap (как и к другим уже опубликованным), создайте декодер и отправьте его в поток.

  /// <summary>
        /// 
        /// </summary>
        /// <param name="writeableBitmap"></param>
        /// <param name="outputFile"></param>
        /// <param name="encoderId"></param>
        /// <returns></returns>
        public static async Task SaveToFile(
            this WriteableBitmap writeableBitmap,
            IStorageFile outputFile,
            Guid encoderId)
        {
            try
            {
                Stream stream = writeableBitmap.PixelBuffer.AsStream();
                byte[] pixels = new byte[(uint)stream.Length];
                await stream.ReadAsync(pixels, 0, pixels.Length);

                using (var writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
                {
                    var encoder = await BitmapEncoder.CreateAsync(encoderId, writeStream);
                    encoder.SetPixelData(
                        BitmapPixelFormat.Bgra8,
                        BitmapAlphaMode.Premultiplied,
                        (uint)writeableBitmap.PixelWidth,
                        (uint)writeableBitmap.PixelHeight,
                        96,
                        96,
                        pixels);
                    await encoder.FlushAsync();

                    using (var outputStream = writeStream.GetOutputStreamAt(0))
                    {
                        await outputStream.FlushAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                string s = ex.ToString();
            }
        }
0

xaml и сохранить его как изображение, вам не повезло. В wpf есть метод для записи растрового изображения, который принимает UIelement в качестве параметра, но его нет в приложениях магазина Windows.

Вы можете использовать DirectX, но это очень сложный подход. Большинство приложений для рисования в магазине используют JavaScript, так как его гораздо проще сохранить.

3

Вы можете сохранить BitmapImage следующим образом.

Windows.Storage.StorageFolder localFolder =   Windows.Storage.ApplicationData.Current.LocalFolder;
        StorageFile sampleFile = await localFolder.CreateFileAsync("image.png");
        await FileIO.WriteBytesAsync(sampleFile, bytes);

image.png будет сохранен в LocalFolder приложения.

Надеюсь, это поможет!

Биная Радж Шреста

Похожие вопросы