コード例 #1
0
        internal override void FinalizeCreation()
        {
            try
            {
                using (FactoryMaker myFactory = new FactoryMaker())
                {
                    SafeMILHandle renderTargetBitmap = null;
                    HRESULT.Check(UnsafeNativeMethods.MILFactory2.CreateBitmapRenderTarget(
                                      myFactory.FactoryPtr,
                                      (uint)_pixelWidth,
                                      (uint)_pixelHeight,
                                      _format.Format,
                                      (float)_dpiX,
                                      (float)_dpiY,
                                      MILRTInitializationFlags.MIL_RT_INITIALIZE_DEFAULT,
                                      out renderTargetBitmap));

                    Debug.Assert(renderTargetBitmap != null && !renderTargetBitmap.IsInvalid);

                    BitmapSourceSafeMILHandle bitmapSource = null;
                    HRESULT.Check(MILRenderTargetBitmap.GetBitmap(
                                      renderTargetBitmap,
                                      out bitmapSource));
                    Debug.Assert(bitmapSource != null && !bitmapSource.IsInvalid);

                    lock (_syncObject)
                    {
                        _renderTargetBitmap = renderTargetBitmap;
                        bitmapSource.CalculateSize();
                        WicSourceHandle = bitmapSource;

                        // For the purpose of rendering a RenderTargetBitmap, we always treat it as if it's
                        // not cached.  This is to ensure we never render and write to the same bitmap source
                        // by the UCE thread and managed thread.
                        _isSourceCached = false;
                    }
                }

                CreationCompleted = true;
                UpdateCachedSettings();
            }
            catch
            {
                _bitmapInit.Reset();
                throw;
            }
        }
コード例 #2
0
 public void Clear()
 {
     HRESULT.Check(MILRenderTargetBitmap.Clear(_renderTargetBitmap));
     RenderTargetContentsChanged();
 }