protected byte[] RenderText(string text) { if (!Application.Current.Dispatcher.HasShutdownStarted) { return(Application.Current.Dispatcher.Invoke(() => { TextBlock textBlock = new TextBlock(); textBlock.BeginInit(); textBlock.Text = text; textBlock.Width = double.IsNaN(Width) ? Width : Width - 10; textBlock.TextAlignment = TextAlignment; textBlock.TextWrapping = AutoSize ? TextWrapping.NoWrap : TextWrapping.Wrap; textBlock.TextTrimming = TextTrimming.CharacterEllipsis; textBlock.FontFamily = Font.Family; textBlock.FontSize = Font.Size; textBlock.FontWeight = Font.Weight; textBlock.FontStyle = Font.Style; textBlock.FontStretch = Font.Stretch; textBlock.EndInit(); textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); textBlock.Arrange(new Rect(textBlock.DesiredSize)); textBlock.UpdateLayout(); RenderTargetBitmap bmp = new RenderTargetBitmap(Convert.ToInt32(Math.Ceiling(textBlock.ActualWidth)), Convert.ToInt32(Math.Ceiling(textBlock.ActualHeight)), 96, 96, PixelFormats.Pbgra32); bmp.Render(textBlock); var encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); using (var stream = new MemoryStream()) { encoder.Save(stream); return stream.ToArray(); } })); } return(new byte[0]); }
protected void UpdateTagDisplay() { if (m_flagsBlock != null) { Children.Remove(m_flagsBlock); m_flagsBlock = null; } if (!m_showMetadata) { return; // No metadata to be shown } string flagsText = m_title ?? string.Empty; if (m_tags != null && m_tags.Count > 0) { flagsText = string.Concat(flagsText, "\r\n", string.Join("\r\n", m_tags)); } if (!string.IsNullOrEmpty(flagsText)) { m_flagsBlock = new TextBlock(); m_flagsBlock.BeginInit(); m_flagsBlock.Text = flagsText; m_flagsBlock.FontSize = cTagsFontSize; m_flagsBlock.Foreground = cTagsColor; m_flagsBlock.FontWeight = FontWeights.Bold; m_flagsBlock.HorizontalAlignment = HorizontalAlignment.Right; m_flagsBlock.VerticalAlignment = VerticalAlignment.Top; m_flagsBlock.EndInit(); Children.Add(m_flagsBlock); } }
protected void UpdateMetadata() { // Remove any existing metadata block if (m_metadataBlock != null) { Children.Remove(m_metadataBlock); m_metadataBlock = null; } if (!m_showMetadata) { return; // No metadata to be shown } StringBuilder builder = new StringBuilder(); if (m_uri != null) { string path = m_uri.OriginalString; SlideShow slideShow = Parent as SlideShow; if (slideShow != null) { string rootPath = slideShow.RootPath; if (path.StartsWith(rootPath, StringComparison.OrdinalIgnoreCase)) { path = path.Substring(rootPath.Length); } } string[] pathParts = path.Split(sPathSeparators, StringSplitOptions.RemoveEmptyEntries); foreach (string part in pathParts) { builder.Append("\r\n"); builder.Append(part); } } if (m_dateTaken != null) { builder.Append("\r\n"); builder.Append(m_dateTaken); } if (builder.Length > 0) { m_metadataBlock = new TextBlock(); m_metadataBlock.BeginInit(); m_metadataBlock.Text = builder.ToString(); m_metadataBlock.FontSize = cMetadataFontSize; m_metadataBlock.Foreground = cMetadataColor; m_metadataBlock.HorizontalAlignment = HorizontalAlignment.Right; m_metadataBlock.VerticalAlignment = VerticalAlignment.Bottom; m_metadataBlock.TextAlignment = TextAlignment.Right; m_metadataBlock.EndInit(); Children.Add(m_metadataBlock); } UpdateTagDisplay(); }
public void RenderText() { RenderTargetBitmap rtBitmap = new RenderTargetBitmap(_width, _height, 96.0, 96.0, PixelFormats.Pbgra32); Grid grid = new Grid(); grid.BeginInit(); grid.Background = new ImageBrush(_bmp); grid.Arrange(new Rect(new System.Windows.Size(_width, _height))); foreach (Label l in TextList) { TextBlock txtBlock = new TextBlock(); txtBlock.BeginInit(); txtBlock.FontSize = 12; txtBlock.HorizontalAlignment = HorizontalAlignment.Center; txtBlock.Text = l.Text; txtBlock.Arrange(new Rect(l.X1, l.Y1, l.X2 - l.X1, l.Y2 - l.Y1)); txtBlock.EndInit(); grid.Children.Add(txtBlock); } grid.EndInit(); rtBitmap.Render(grid); _bmp.Lock(); rtBitmap.CopyPixels(new Int32Rect(0, 0, rtBitmap.PixelWidth, rtBitmap.PixelHeight), _bmp.BackBuffer, _bmp.BackBufferStride * _bmp.PixelHeight, _bmp.BackBufferStride); _bmp.AddDirtyRect(new Int32Rect(0, 0, _width, _height)); _bmp.Unlock(); TextList.Clear(); }
private void OnLoadComplete() { try { if (m_bitmap != null) { Image image = new Image(); image.BeginInit(); image.Source = m_bitmap; image.Stretch = Stretch.Uniform; image.EndInit(); Children.Add(image); } else { string message = (m_loadError != null) ? string.Concat("Failed to load image:\r\n", m_loadError.Message) : "Failed to load image."; TextBlock label = new TextBlock(); label.BeginInit(); //label.Content = message; //label.HorizontalContentAlignment = HorizontalAlignment.Center; //label.VerticalContentAlignment = VerticalAlignment.Center; label.Text = message; label.FontSize = 20; label.Foreground = Brushes.White; label.TextWrapping = TextWrapping.Wrap; label.EndInit(); Children.Add(label); } UpdateMetadata(); // Don't change the state if already displayed. if (PanelState == PanelState.Init) { SetPanelState(PanelState.Ready); } } catch (Exception err) { Debug.WriteLine(err.ToString()); } }
public void Message(string msg) { if (fMessage != null) { Children.Remove(fMessage); fMessage = null; } if (!string.IsNullOrEmpty(msg)) { TextBlock txtblk = new TextBlock(); txtblk.BeginInit(); txtblk.Text = msg; txtblk.FontSize = 28; txtblk.Foreground = Brushes.Crimson; txtblk.HorizontalAlignment = HorizontalAlignment.Left; txtblk.VerticalAlignment = VerticalAlignment.Bottom; txtblk.EndInit(); Children.Add(txtblk); fMessage = txtblk; fClearMessageAt = Environment.TickCount + cMessageDisplayPeriod; } }