Beispiel #1
0
        /// <summary>
        /// Erzeugt die aktuelle Seite als <see cref="Bitmap"/>.
        /// </summary>
        /// <param name="holder">Ein Anzeigeelement als Referenz für die Parameter der <see cref="Bitmap"/>.</param>
        /// <param name="digits">Alle auf der Seite verwendeten Zahlen.</param>
        /// <returns>Eine Darstellung der aktuellen Videotext Seite.</returns>
        public Bitmap CreatePage(Control holder, out DigitManager digits)
        {
            // Helper
            RectangleF extend;

            // Forward
            return(CreatePage(holder, out digits, out extend));
        }
        /// <summary>
        /// Erzeugt eine neue Instanz der Hilfsklasse.
        /// </summary>
        /// <param name="g">Die Zeichenumgebung, in der die Videotext Seite integriert werden muss.</param>
        /// <param name="isTransparent">Gesetzt, wenn die Seite durchscheinend sein soll.</param>
        public PageDrawingContext( Graphics g, bool isTransparent )
        {
            // Remember 
            IsTransparent = isTransparent;

            // Measure the size of a letter and a mosaic brick
            NormalCharacterSize = g.MeasureString( "X", LineDrawingContext.NormalTextFont );
            MosaicElementSize = new SizeF( NormalCharacterSize.Width / 2, NormalCharacterSize.Height / 3 );

            // Create the bitmap
            m_Bitmap = new Bitmap( (int) (40 * NormalCharacterSize.Width), (int) (26 * NormalCharacterSize.Height), g );

            // Create digit manager
            Digits = new DigitManager( m_Bitmap );

            // Create the drawing backbone
            m_Graphics = Graphics.FromImage( m_Bitmap );

            // Remember background
            Background = isTransparent ? TTXPage.TransparentColor : LineDrawingContext.Brushes[Color.Black];

            // Prepare the page
            m_Graphics.FillRectangle( Background, 0, 0, m_Bitmap.Width, m_Bitmap.Height );
        }
        /// <summary>
        /// Erzeugt eine neue Instanz der Hilfsklasse.
        /// </summary>
        /// <param name="g">Die Zeichenumgebung, in der die Videotext Seite integriert werden muss.</param>
        /// <param name="isTransparent">Gesetzt, wenn die Seite durchscheinend sein soll.</param>
        public PageDrawingContext(Graphics g, bool isTransparent)
        {
            // Remember
            IsTransparent = isTransparent;

            // Measure the size of a letter and a mosaic brick
            NormalCharacterSize = g.MeasureString("X", LineDrawingContext.NormalTextFont);
            MosaicElementSize   = new SizeF(NormalCharacterSize.Width / 2, NormalCharacterSize.Height / 3);

            // Create the bitmap
            m_Bitmap = new Bitmap((int)(40 * NormalCharacterSize.Width), (int)(26 * NormalCharacterSize.Height), g);

            // Create digit manager
            Digits = new DigitManager(m_Bitmap);

            // Create the drawing backbone
            m_Graphics = Graphics.FromImage(m_Bitmap);

            // Remember background
            Background = isTransparent ? TTXPage.TransparentColor : LineDrawingContext.Brushes[Color.Black];

            // Prepare the page
            m_Graphics.FillRectangle(Background, 0, 0, m_Bitmap.Width, m_Bitmap.Height);
        }
Beispiel #4
0
        /// <summary>
        /// Erzeugt die aktuelle Seite als <see cref="Bitmap"/>.
        /// </summary>
        /// <param name="holder">Ein Anzeigeelement als Referenz für die Parameter der <see cref="Bitmap"/>.</param>
        /// <param name="digits">Alle auf der Seite verwendeten Zahlen.</param>
        /// <param name="extend">Beschreibt den tatsächlich relevanten Teil der Seite.</param>
        /// <returns>Eine Darstellung der aktuellen Videotext Seite.</returns>
        public Bitmap CreatePage(Control holder, out DigitManager digits, out RectangleF extend)
        {
            // Create device context
            using (var referenceContext = Graphics.FromHwnd(holder.Handle))
                using (var pageDraw = new PageDrawingContext(referenceContext, IsTransparent))
                {
                    // Process header
                    if (!IsTransparent)
                    {
                        if (!NoHeader)
                        {
                            // Get the prefix for the headline
                            string prefix;
                            if (!string.IsNullOrEmpty(Feedback))
                            {
                                prefix = string.Format("{0}       ", Feedback).Substring(0, 8);
                            }
                            else if (SubPage < 1)
                            {
                                prefix = string.Format("{0:000}     ", Page);
                            }
                            else
                            {
                                prefix = string.Format("{0:000}/{1:00}  ", Page, SubPage).Substring(0, 8);
                            }

                            // Fill the headline
                            pageDraw.DrawHeader(prefix, Header);
                        }
                    }

                    // Fill the body
                    if (!Hide)
                    {
                        for (int i = 0; ++i < 26;)
                        {
                            // Line data
                            byte[] line;
                            if (!m_Lines.TryGetValue(i, out line))
                            {
                                continue;
                            }

                            // Fill the line
                            LineDrawingContext context = pageDraw.DrawLine(i, line);

                            // Skip line if double height characters are used
                            if (context.HasDoubleHeight)
                            {
                                i++;
                            }
                        }
                    }

                    // Attach to digit manager of context
                    digits = pageDraw.Digits;
                    extend = pageDraw.Extend;

                    // Report
                    return(pageDraw.Detach());
                }
        }
        /// <summary>
        /// Nimmt eine Videotextseite entgegen.
        /// </summary>
        /// <param name="page">Die gewünschte Videotextseite, eventuell leer.</param>
        /// <param name="digits">Informationen zum Auftreten von Zahlen in der Darstellung.</param>
        /// <returns>Gesetzt, wenn eine Seite erfolgreich angezeigt wurde.</returns>
        public bool ShowPage( TTXPage page, out DigitManager digits )
        {
            // Safe create
            try
            {
                // Create the bitmap from the page
                RectangleF extend;
                using (var ttx = page.CreatePage( this, out digits, out extend ))
                {
                    // Default position
                    double left = GetNormalizedBorder( 0.8 ), top = 0.1;
                    double right = 1.0 - left, bottom = 1.0 - top;

                    // Get the transparency color
                    if (page.IsTransparent)
                    {
                        // There is nothing to show
                        if (extend.IsEmpty)
                            return true;

                        // Check mode
                        if (UseLegacyOverlay)
                        {
                            // Get size
                            double width = right - left, height = bottom - top;

                            // Correct against bounds
                            left += width * extend.Left;
                            top += height * extend.Top;

                            // Correct against bounds
                            right = left + width * extend.Width;
                            bottom = top + height * extend.Height;

                            // Get the range of interest
                            var srcRange =
                                new RectangleF
                                    (
                                        (float) (extend.Left * ttx.Width),
                                        (float) (extend.Top * ttx.Height),
                                        (float) (extend.Width * ttx.Width),
                                        (float) (extend.Height * ttx.Height)
                                    );

                            // Create new bitmap
                            using (var clipped = new Bitmap( ttx, (int) Math.Round( srcRange.Width ), (int) Math.Round( srcRange.Height ) ))
                            {
                                // Prepare to update
                                using (var dest = Graphics.FromImage( clipped ))
                                {
                                    // Get full ranges
                                    var destRange = new RectangleF( 0, 0, clipped.Width, clipped.Height );

                                    // Fill
                                    dest.DrawImage( ttx, destRange, srcRange, GraphicsUnit.Pixel );
                                }

                                // Simpy show up
                                ShowOverlay( clipped, left, top, right, bottom, null, null );
                            }
                        }
                        else
                        {
                            // Simpy show up
                            ShowOverlay( ttx, left, top, right, bottom, null, TTXPage.TransparentColor.Color );
                        }
                    }
                    else
                    {
                        // Simpy show up
                        ShowOverlay( ttx, left, top, right, bottom, null, null );
                    }
                }

                // Did it
                return true;
            }
            catch
            {
                // Reset
                digits = null;

                // Leave
                return false;
            }
        }
Beispiel #6
0
        /// <summary>
        /// Erzeugt die aktuelle Seite als <see cref="Bitmap"/>.
        /// </summary>
        /// <param name="holder">Ein Anzeigeelement als Referenz für die Parameter der <see cref="Bitmap"/>.</param>
        /// <param name="digits">Alle auf der Seite verwendeten Zahlen.</param>
        /// <param name="extend">Beschreibt den tatsächlich relevanten Teil der Seite.</param>
        /// <returns>Eine Darstellung der aktuellen Videotext Seite.</returns>
        public Bitmap CreatePage( Control holder, out DigitManager digits, out RectangleF extend )
        {
            // Create device context
            using (var referenceContext = Graphics.FromHwnd( holder.Handle ))
            using (var pageDraw = new PageDrawingContext( referenceContext, IsTransparent ))
            {
                // Process header
                if (!IsTransparent)
                    if (!NoHeader)
                    {
                        // Get the prefix for the headline
                        string prefix;
                        if (!string.IsNullOrEmpty( Feedback ))
                            prefix = string.Format( "{0}       ", Feedback ).Substring( 0, 8 );
                        else if (SubPage < 1)
                            prefix = string.Format( "{0:000}     ", Page );
                        else
                            prefix = string.Format( "{0:000}/{1:00}  ", Page, SubPage ).Substring( 0, 8 );

                        // Fill the headline
                        pageDraw.DrawHeader( prefix, Header );
                    }

                // Fill the body
                if (!Hide)
                    for (int i = 0; ++i < 26; )
                    {
                        // Line data
                        byte[] line;
                        if (!m_Lines.TryGetValue( i, out line ))
                            continue;

                        // Fill the line
                        LineDrawingContext context = pageDraw.DrawLine( i, line );

                        // Skip line if double height characters are used
                        if (context.HasDoubleHeight)
                            i++;
                    }

                // Attach to digit manager of context
                digits = pageDraw.Digits;
                extend = pageDraw.Extend;

                // Report
                return pageDraw.Detach();
            }
        }
Beispiel #7
0
        /// <summary>
        /// Erzeugt die aktuelle Seite als <see cref="Bitmap"/>.
        /// </summary>
        /// <param name="holder">Ein Anzeigeelement als Referenz für die Parameter der <see cref="Bitmap"/>.</param>
        /// <param name="digits">Alle auf der Seite verwendeten Zahlen.</param>
        /// <returns>Eine Darstellung der aktuellen Videotext Seite.</returns>
        public Bitmap CreatePage( Control holder, out DigitManager digits )
        {
            // Helper
            RectangleF extend;

            // Forward
            return CreatePage( holder, out digits, out extend );
        }