Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / System / Windows / Media / Imaging / BitmapVisualManager.cs / 1 / BitmapVisualManager.cs
//------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, 2003 // // File: BitmapVisualManager.cs // //----------------------------------------------------------------------------- using System; using System.Windows; using System.Threading; using System.Windows.Threading; using System.Diagnostics; using System.Collections; using System.Runtime.InteropServices; using System.IO; using MS.Internal; using System.Security; using System.Security.Permissions; using System.Windows.Media; using System.Windows.Media.Composition; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using MS.Win32.PresentationCore; namespace System.Windows.Media.Imaging { #region public class BitmapVisualManager ////// BitmapVisualManager holds state and context for a drawing a visual to an bitmap. /// internal class BitmapVisualManager : DispatcherObject { #region Constructors private BitmapVisualManager() { } ////// Create an BitmapVisualManager for drawing a visual to the bitmap. /// /// Where the resulting bitmap is rendered public BitmapVisualManager(RenderTargetBitmap bitmapTarget) { if (bitmapTarget == null) { throw new ArgumentNullException("bitmapTarget"); } if (bitmapTarget.IsFrozen) { throw new ArgumentException(SR.Get(SRID.Image_CantBeFrozen, null)); } _bitmapTarget = bitmapTarget; } #endregion #region Public methods ////// Render visual to printer. /// /// Root of the visual to render public void Render(Visual visual) { Render(visual, Matrix.Identity, Rect.Empty, false); } ////// Render visual to printer. /// /// Root of the visual to render /// World transform to apply to the root visual /// The window clip of the outermost window or Empty /// True if we are rendering the visual /// to apply an effect to it /// ////// Critical - Deals with bitmap handles /// TreatAsSafe - validates all parameters, uses safe wrappers /// [SecurityCritical,SecurityTreatAsSafe] internal void Render(Visual visual, Matrix worldTransform, Rect windowClip, bool fRenderForBitmapEffect) { if (visual == null) { throw new ArgumentNullException("visual"); } // If the bitmapTarget we're writing to is frozen then we can't proceed. Note that // it's possible for the BitmapVisualManager to be constructed with a mutable BitmapImage // and for the app to later freeze it. Such an application is misbehaving if // they subsequently try to render to the BitmapImage. if (_bitmapTarget.IsFrozen) { throw new ArgumentException(SR.Get(SRID.Image_CantBeFrozen)); } int sizeX = _bitmapTarget.PixelWidth; int sizeY = _bitmapTarget.PixelHeight; double dpiX = _bitmapTarget.DpiX; double dpiY = _bitmapTarget.DpiY; Debug.Assert ((sizeX > 0) && (sizeY > 0)); Debug.Assert ((dpiX > 0) && (dpiY > 0)); // validate the data if ((sizeX <= 0) || (sizeY <= 0)) { return; // nothing to draw } if ((dpiX <= 0) || (dpiY <= 0)) { dpiX = 96; dpiY = 96; } SafeMILHandle renderTargetBitmap = _bitmapTarget.MILRenderTarget; Debug.Assert (renderTargetBitmap != null, "Render Target is null"); IntPtr pIRenderTargetBitmap = IntPtr.Zero; try { // // Allocate a fresh synchronous channel. // MediaContext mctx = MediaContext.CurrentMediaContext; DUCE.Channel channel = mctx.AllocateSyncChannel(); // // Acquire the target bitmap. // Guid iidRTB = MILGuidData.IID_IMILRenderTargetBitmap; HRESULT.Check(UnsafeNativeMethods.MILUnknown.QueryInterface( renderTargetBitmap, ref iidRTB, out pIRenderTargetBitmap)); // // Render the visual on the synchronous channel. // Renderer.Render( pIRenderTargetBitmap, channel, visual, sizeX, sizeY, dpiX, dpiY, worldTransform, windowClip, fRenderForBitmapEffect); // // Release the synchronous channel. This way we can // re-use that channel later. // mctx.ReleaseSyncChannel(channel); } finally { UnsafeNativeMethods.MILUnknown.ReleaseInterface(ref pIRenderTargetBitmap); } _bitmapTarget.RenderTargetContentsChanged(); } #endregion #region Member Variables private RenderTargetBitmap _bitmapTarget = null; #endregion } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, 2003 // // File: BitmapVisualManager.cs // //----------------------------------------------------------------------------- using System; using System.Windows; using System.Threading; using System.Windows.Threading; using System.Diagnostics; using System.Collections; using System.Runtime.InteropServices; using System.IO; using MS.Internal; using System.Security; using System.Security.Permissions; using System.Windows.Media; using System.Windows.Media.Composition; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using MS.Win32.PresentationCore; namespace System.Windows.Media.Imaging { #region public class BitmapVisualManager ////// BitmapVisualManager holds state and context for a drawing a visual to an bitmap. /// internal class BitmapVisualManager : DispatcherObject { #region Constructors private BitmapVisualManager() { } ////// Create an BitmapVisualManager for drawing a visual to the bitmap. /// /// Where the resulting bitmap is rendered public BitmapVisualManager(RenderTargetBitmap bitmapTarget) { if (bitmapTarget == null) { throw new ArgumentNullException("bitmapTarget"); } if (bitmapTarget.IsFrozen) { throw new ArgumentException(SR.Get(SRID.Image_CantBeFrozen, null)); } _bitmapTarget = bitmapTarget; } #endregion #region Public methods ////// Render visual to printer. /// /// Root of the visual to render public void Render(Visual visual) { Render(visual, Matrix.Identity, Rect.Empty, false); } ////// Render visual to printer. /// /// Root of the visual to render /// World transform to apply to the root visual /// The window clip of the outermost window or Empty /// True if we are rendering the visual /// to apply an effect to it /// ////// Critical - Deals with bitmap handles /// TreatAsSafe - validates all parameters, uses safe wrappers /// [SecurityCritical,SecurityTreatAsSafe] internal void Render(Visual visual, Matrix worldTransform, Rect windowClip, bool fRenderForBitmapEffect) { if (visual == null) { throw new ArgumentNullException("visual"); } // If the bitmapTarget we're writing to is frozen then we can't proceed. Note that // it's possible for the BitmapVisualManager to be constructed with a mutable BitmapImage // and for the app to later freeze it. Such an application is misbehaving if // they subsequently try to render to the BitmapImage. if (_bitmapTarget.IsFrozen) { throw new ArgumentException(SR.Get(SRID.Image_CantBeFrozen)); } int sizeX = _bitmapTarget.PixelWidth; int sizeY = _bitmapTarget.PixelHeight; double dpiX = _bitmapTarget.DpiX; double dpiY = _bitmapTarget.DpiY; Debug.Assert ((sizeX > 0) && (sizeY > 0)); Debug.Assert ((dpiX > 0) && (dpiY > 0)); // validate the data if ((sizeX <= 0) || (sizeY <= 0)) { return; // nothing to draw } if ((dpiX <= 0) || (dpiY <= 0)) { dpiX = 96; dpiY = 96; } SafeMILHandle renderTargetBitmap = _bitmapTarget.MILRenderTarget; Debug.Assert (renderTargetBitmap != null, "Render Target is null"); IntPtr pIRenderTargetBitmap = IntPtr.Zero; try { // // Allocate a fresh synchronous channel. // MediaContext mctx = MediaContext.CurrentMediaContext; DUCE.Channel channel = mctx.AllocateSyncChannel(); // // Acquire the target bitmap. // Guid iidRTB = MILGuidData.IID_IMILRenderTargetBitmap; HRESULT.Check(UnsafeNativeMethods.MILUnknown.QueryInterface( renderTargetBitmap, ref iidRTB, out pIRenderTargetBitmap)); // // Render the visual on the synchronous channel. // Renderer.Render( pIRenderTargetBitmap, channel, visual, sizeX, sizeY, dpiX, dpiY, worldTransform, windowClip, fRenderForBitmapEffect); // // Release the synchronous channel. This way we can // re-use that channel later. // mctx.ReleaseSyncChannel(channel); } finally { UnsafeNativeMethods.MILUnknown.ReleaseInterface(ref pIRenderTargetBitmap); } _bitmapTarget.RenderTargetContentsChanged(); } #endregion #region Member Variables private RenderTargetBitmap _bitmapTarget = null; #endregion } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProcessModule.cs
- UmAlQuraCalendar.cs
- SvcMapFile.cs
- SystemEvents.cs
- PathData.cs
- CodeChecksumPragma.cs
- XmlWrappingWriter.cs
- NativeRecognizer.cs
- DataContractSerializerOperationFormatter.cs
- XmlSerializableServices.cs
- ImportFileRequest.cs
- GridViewCancelEditEventArgs.cs
- FixedStringLookup.cs
- BooleanSwitch.cs
- CodeArgumentReferenceExpression.cs
- SoundPlayer.cs
- Vector3DConverter.cs
- HyperLinkDesigner.cs
- AnnotationMap.cs
- PlaceHolder.cs
- CqlBlock.cs
- WSSecurityXXX2005.cs
- SafeLibraryHandle.cs
- HostingEnvironmentException.cs
- MultiplexingFormatMapping.cs
- CharacterMetricsDictionary.cs
- Number.cs
- EmptyEnumerable.cs
- ObjectAnimationUsingKeyFrames.cs
- _IPv4Address.cs
- ProxyWebPartManager.cs
- LayoutExceptionEventArgs.cs
- SecurityElement.cs
- StringExpressionSet.cs
- InplaceBitmapMetadataWriter.cs
- VisualTreeUtils.cs
- HtmlInputFile.cs
- XmlMemberMapping.cs
- ArrayExtension.cs
- ColorTransform.cs
- ObjectStateManagerMetadata.cs
- EventDescriptorCollection.cs
- ClassValidator.cs
- PrintDialogDesigner.cs
- OdbcConnectionPoolProviderInfo.cs
- ChangePassword.cs
- SystemIPGlobalStatistics.cs
- NativeMethods.cs
- FixedSOMFixedBlock.cs
- X509SubjectKeyIdentifierClause.cs
- GACIdentityPermission.cs
- Image.cs
- AsyncStreamReader.cs
- XsdBuildProvider.cs
- Events.cs
- GPPOINTF.cs
- Command.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- TCEAdapterGenerator.cs
- WebException.cs
- ProviderBase.cs
- AvTraceDetails.cs
- ObjectDataSourceView.cs
- ADRoleFactory.cs
- Storyboard.cs
- ExtenderProvidedPropertyAttribute.cs
- TraceSwitch.cs
- RepeaterItemEventArgs.cs
- DSGeneratorProblem.cs
- SchemaCollectionCompiler.cs
- MultiTargetingUtil.cs
- RoleServiceManager.cs
- ActivityCodeDomReferenceService.cs
- MarkerProperties.cs
- thaishape.cs
- Policy.cs
- HTMLTagNameToTypeMapper.cs
- UserControl.cs
- DataGridViewCellPaintingEventArgs.cs
- ColumnBinding.cs
- SystemNetworkInterface.cs
- XmlText.cs
- XmlNodeComparer.cs
- ContextBase.cs
- HttpHandler.cs
- ColumnMapCopier.cs
- ConfigXmlAttribute.cs
- Condition.cs
- KeyConverter.cs
- LocalValueEnumerator.cs
- KnownTypesHelper.cs
- SmtpSection.cs
- SocketElement.cs
- XXXOnTypeBuilderInstantiation.cs
- CorePropertiesFilter.cs
- TypedOperationInfo.cs
- SchemaName.cs
- XmlTypeAttribute.cs
- PageParser.cs
- StaticTextPointer.cs