2014-10-08 2 views
0

Я написал код в ОС Windows 8.1 приложение, чтобы обрезать изображение и сохранить его с помощью учебникаДобавить эллипс изображения и сохранить его в ОС Windows 8.1 APP

http://code.msdn.microsoft.com/windowsapps/CSWin8AppCropBitmap-52fa1ad7

Теперь я хочу, чтобы отредактировать изображение добавляя на картинке такие фигуры, как Ellipse. Для этого я создал эллипс

var Circle = new Ellipse 
{ 
     Height = 50, 
     Width = 50, 
     Fill = brush, 
     RenderTransform = new CompositeTransform(), 

}; 

и добавить его в холсте, который содержит мое выше изображение загружается из компьютера как:

imageCanvas.Children.Add(Circle); 

я могу увидеть эллипс загружен в моей первоначальной картинке, но при сохранении только моя оригинальная фотография сохраняется (не с эллипсом). Я хочу редактировать изображение, встраивая эллипс в исходное изображение. Как мне это сделать?

ответ

2

Я думаю, что вы сохраняете изображение, и поэтому только изображение сохраняется, а не круг на изображении. Чтобы сохранить редактируемое изображение с кругом, вам НЕОБХОДИМО СОХРАНИТЬ ДЕТЕЙ CANVAS

Предполагая, что вы хорошо знакомы с классами IRandomAccesStream и Encoder, я приводил здесь свой код, который я использовал иногда назад, который работает на 100%. В коде я также предоставил средство FileSavePicker, через которое пользователь сохраняет изображение в нужном месте. Здесь, can is is canvas

private async void save_Click(object sender, RoutedEventArgs e) 
    { 

     if (can != null) 
     { 
      RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
      await renderTargetBitmap.RenderAsync(can); 


      FileSavePicker picker = new FileSavePicker(); 

      picker.FileTypeChoices.Add("PNG Image",new string[]{".png"}); 
      StorageFile file = await picker.PickSaveFileAsync(); 
      if (file != null) 
      { 
       var pixels = await renderTargetBitmap.GetPixelsAsync(); 

       using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
       { 
       var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream); 
        byte[] bytes = pixels.ToArray(); 
        encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)can.Width, (uint)can.Height, 96, 96, bytes); 
        await encoder.FlushAsync(); 
       } 
      } 
      } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^