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); } }
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); } } }