protected override void Render(RenderTarget rt) { if (image == null) { base.Render(rt); return; } rt.Clear(this.SceneColorBrush.Color); rt.Transform = Matrix3x2.Identity; Size2 imageSize = this.image.PixelSize; double scale = Math.Min((double)(ClientSize.Width - ImagePadding) / imageSize.Width, (double)(ClientSize.Height - ImagePadding) / imageSize.Height); int imageWidth = (int)(imageSize.Width * scale); int imageHeight = (int)(imageSize.Height * scale); var rcBounds = new RectangleF(0, 0, imageSize.Width, imageSize.Height); var rcImage = new RectangleF((ClientSize.Width - imageWidth) / 2, (ClientSize.Height - imageHeight) / 2, imageWidth, imageHeight); bool isBGRAImage = image.PixelFormat.Format == SharpDX.DXGI.Format.B8G8R8A8_UNorm; if (!isBGRAImage) { var sz = new Size2F(imageSize.Width, imageSize.Height); var rc = new RectangleF(0, 0, imageSize.Width, imageSize.Height); if (bgraImageRenderer == null || bgraImageRenderer.Size != sz) { SharpDX.Utilities.Dispose(ref bgraImageRenderer); bgraImageRenderer = new BitmapRenderTarget(RenderTarget2D, CompatibleRenderTargetOptions.None, sz); } bgraImageRenderer.BeginDraw(); bgraImageRenderer.Clear(Color.Black); bgraImageRenderer.AntialiasMode = AntialiasMode.Aliased; bgraImageRenderer.FillOpacityMask(this.image, whiteBrush, OpacityMaskContent.Graphics, rc, rc); bgraImageRenderer.EndDraw(); } rt.DrawBitmap(isBGRAImage ? image : bgraImageRenderer.Bitmap, rcImage, 1, BitmapInterpolationMode.NearestNeighbor, rcBounds); if (ImagePadding != 0) { rt.DrawRectangle(rcImage, whiteBrush, 1); } }