Exemplo n.º 1
0
        protected override void RenderSynchronized(int width, int height)
        {
            base.RenderSynchronized(width, height);
            IFrameVideo videoData;

            if (_showQueue.TryDequeue(out videoData))
            {
                if (_lastVideoData != null)
                {
                    _updateQueue.Enqueue(_lastVideoData);
                }
                _lastVideoData = videoData;
            }
            videoData = _lastVideoData;
            if (videoData == null)
            {
                return;
            }
            if (_frameSize != videoData.Size || _texture0 == null)
            {
                UpdateTextureSize(videoData.Size);
            }
            _frameSizeNormalized = new SizeF(_frameSize.Width, _frameSize.Height * videoData.Ratio);
            UpdateTextureData(videoData);

            var size    = new Size(width, height);
            var dstRect = ScaleHelper.GetDestinationRect(ScaleMode, size, _frameSizeNormalized);

            RenderSprite(_sprite, _texture0, _frameSize, dstRect, AntiAlias);
            if (MimicTv)
            {
                RenderSprite(_spriteTv, _textureMaskTv, new Size(_frameSize.Width, (int)(_frameSize.Height * MimicTvRatio + 0.5F)), dstRect, true);
            }
        }
Exemplo n.º 2
0
        private void RenderGdi(Graphics g, Rectangle rect)
        {
            lock (_slowRenderSync)
            {
                if (_slowSurface != null)
                {
                    g.InterpolationMode = AntiAlias ? System.Drawing.Drawing2D.InterpolationMode.Bilinear : System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;

                    var drawRect = Rectangle.Round(ScaleHelper.GetDestinationRect(ScaleMode, rect.Size, _slowSurface.Size));
                    drawRect = new Rectangle(
                        drawRect.Left + rect.Left,
                        drawRect.Top + rect.Top,
                        drawRect.Width,
                        drawRect.Height);
                    g.DrawImage(_slowSurface, drawRect);

                    var region = new Region(rect);
                    region.Exclude(drawRect);
                    g.FillRegion(Brushes.Black, region);
                }
            }
        }