Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ListItemsCollectionEditor.cs
- ObjectQueryExecutionPlan.cs
- BackEase.cs
- FeatureAttribute.cs
- CacheForPrimitiveTypes.cs
- Hashtable.cs
- HebrewNumber.cs
- ErrorFormatterPage.cs
- ButtonBaseAutomationPeer.cs
- DocumentGridContextMenu.cs
- COM2FontConverter.cs
- MenuEventArgs.cs
- Stack.cs
- ControllableStoryboardAction.cs
- BitmapEffect.cs
- VBIdentifierName.cs
- initElementDictionary.cs
- XmlArrayItemAttribute.cs
- TagPrefixInfo.cs
- HtmlHistory.cs
- WebServiceEnumData.cs
- ContainerAction.cs
- DataGridViewBindingCompleteEventArgs.cs
- WebPartMenuStyle.cs
- LiteralControl.cs
- GroupDescription.cs
- ChangePassword.cs
- MimeObjectFactory.cs
- DragCompletedEventArgs.cs
- WindowsTokenRoleProvider.cs
- smtppermission.cs
- OracleTimeSpan.cs
- ResponseStream.cs
- CapacityStreamGeometryContext.cs
- DPAPIProtectedConfigurationProvider.cs
- NamespaceList.cs
- HuffModule.cs
- CodeArrayIndexerExpression.cs
- CqlWriter.cs
- ConnectionManagementElementCollection.cs
- XmlSecureResolver.cs
- ResourceBinder.cs
- ShapingEngine.cs
- FixedDocumentSequencePaginator.cs
- ImageClickEventArgs.cs
- StandardTransformFactory.cs
- NativeObjectSecurity.cs
- XmlDocumentFragment.cs
- ApplicationSecurityManager.cs
- SessionState.cs
- ObjectConverter.cs
- AdjustableArrowCap.cs
- EntityTransaction.cs
- MenuAutomationPeer.cs
- ConnectionInterfaceCollection.cs
- TransactionScope.cs
- CommandEventArgs.cs
- FlowDocumentScrollViewer.cs
- WeakKeyDictionary.cs
- WindowsScroll.cs
- KeyInfo.cs
- QuadraticBezierSegment.cs
- Authorization.cs
- DataGridRow.cs
- Expression.cs
- MediaCommands.cs
- LicenseProviderAttribute.cs
- ReferencedCollectionType.cs
- UnsafePeerToPeerMethods.cs
- PointUtil.cs
- LinqDataSourceUpdateEventArgs.cs
- _NTAuthentication.cs
- PolyLineSegmentFigureLogic.cs
- LifetimeServices.cs
- OleDbDataAdapter.cs
- HashCoreRequest.cs
- DbProviderFactory.cs
- TypeSource.cs
- cookie.cs
- DataGridViewUtilities.cs
- RawAppCommandInputReport.cs
- ComIntegrationManifestGenerator.cs
- EmbeddedObject.cs
- DataBoundControlAdapter.cs
- StringDictionaryWithComparer.cs
- WebPartManager.cs
- GridViewRowEventArgs.cs
- CacheOutputQuery.cs
- DataServiceClientException.cs
- SecureConversationVersion.cs
- ProviderIncompatibleException.cs
- SqlCrossApplyToCrossJoin.cs
- UInt16.cs
- ErrorCodes.cs
- CompoundFileIOPermission.cs
- WebPartExportVerb.cs
- TextParentUndoUnit.cs
- MetadataItemEmitter.cs
- WhitespaceSignificantCollectionAttribute.cs
- TextParagraphView.cs