2014-01-14 2 views
0

Я пытаюсь создать изображение для плитки, состоящей из сетки с цветом фона и PNG с прозрачным фоном.Сгенерировать изображение из сетки XAML + Изображение с помощью C#

var TestTile = new Grid() 
       { 
        Background = colTemp, 
        HorizontalAlignment = HorizontalAlignment.Stretch, 
        VerticalAlignment = VerticalAlignment.Stretch, 
        Margin = new Thickness(0, 12, 0, 0), 
       }; 
       TestTile.Arrange(new Rect(0, 0, 366, 366)); 

       var ico = new Image() { 
        Source = new BitmapImage(new Uri("Images/mCloudSunT.png", UriKind.Relative)), 
       }; 
       TestTile.Children.Add(ico); 
... 
bitmap.Render(TestTile, new TranslateTransform()); 
... 

Я получаю изображение с цветом фона, но без PNG. Я не получаю ошибки, и URI корректен (проверен).

новый код:

var colTemp = new SolidColorBrush(Color.FromArgb(255, 174, 190, 206)); 
       var TestTile = new Grid() 
       {      
        Background = colTemp, 
        Height = 336, 
        Width = 336, 
       };     

       var ico = new Image() { 
        Source = new BitmapImage(new Uri("Images/mCloudSunT.png", UriKind.Relative)), 
       }; 
       Grid.SetColumn(ico, 0); 
       Grid.SetRow(ico, 0); 
       TestTile.Children.Add(ico); 

       TestTile.Measure(new Size(336, 336)); 
       TestTile.Arrange(new Rect(0, 0, 366, 366)); 

       TestTile.UpdateLayout(); 

Вот код для генерации изображения:

using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) 
       { 
        if (!store.DirectoryExists("shared/shellcontent")) 
        { 
         store.CreateDirectory("shared/shellcontent"); 
        } 
        var bitmap = new WriteableBitmap(336, 336); 
        bitmap.Render(TestTile, new TranslateTransform()); 
        var stream = store.CreateFile("/shared/shellcontent/test.jpg"); 
        bitmap.Invalidate(); 
        bitmap.SaveJpeg(stream, 366, 336, 0, 100); 
        stream.Close(); 

А вот код для использования в качестве плитки фона:

ShellTile PinnedTile = ShellTile.ActiveTiles.First(); 
       FlipTileData UpdatedTileData = new FlipTileData 
       { 
        BackgroundImage = new Uri("isostore:/shared/shellcontent/test.jpg", UriKind.RelativeOrAbsolute),      
       }; 
       PinnedTile.Update(UpdatedTileData); 
+0

Правильно ли загружено изображение в ico? Вы можете проверить? –

+0

Попробуйте добавить Grid.RowDefinitions и Grid.ColumnDefinitions, не уверены, что их можно опустить. – Blablablaster

+1

Попробуйте вызвать 'TestTile.Arrange' после' TestTile.Children.Add (ico) '. Вам, безусловно, также придется называть 'TestTile.Measure' до' Arrange'. – Clemens

ответ

0

вызовов Мерой а затем Упорядочить после добавления значка.

TestTile.Measure(new Size(366,366)); 
TestTile.Arrange(new Rect(0, 0, 366, 366)); 
TestTile.UpdateLayout(); 

... 
WritableBitmap... 
+0

Я пробовал - посмотрите выше - но без изменений – user3168511

0

Я не вижу причин для вызова SetColumn, SetRow, Мера, организовать или UpdateLayout. Кроме того, после вызова Render() вызовите Invalidate(). Попробуйте следующее:

var colTemp = new SolidColorBrush(Color.FromArgb(255, 174, 190, 206)); 
      var TestTile = new Grid() 
      {      
       Background = colTemp, 
       Height = 336, 
       Width = 336, 
      };     

      var ico = new Image() { 
       Source = new BitmapImage(new Uri("Images/mCloudSunT.png", UriKind.Relative)), 
      }; 

      TestTile.Children.Add(ico); 

.... 

bitmap.Render(TestTile, new TranslateTransform()); 
bitmap.Invalidate(); 
+0

no image - Я попытался добавить другую сетку - это работает, но я должен использовать Arrange (). он работает также с текстовым блоком без Arrange(), но не с Image. Он швы, как будто ему нужно что-то вроде Arrange(), но для изображений. Я попробовал это также с помощью jpg вместо png no sucsess – user3168511

+0

Не могли бы вы опубликовать код, демонстрирующий реализацию изображения после его создания? – philorube

+0

Я добавил код – user3168511

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