Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / Imaging / BitmapVisualManager.cs / 1305600 / 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);
}
///
/// 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)
{
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);
//
// 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);
}
///
/// 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)
{
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);
//
// 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
- BufferModeSettings.cs
- DirectionalLight.cs
- Latin1Encoding.cs
- TemplateFactory.cs
- PageParser.cs
- MembershipPasswordException.cs
- SqlDataSourceParameterParser.cs
- ToolStripPanelCell.cs
- FixedTextSelectionProcessor.cs
- SoapReflector.cs
- Util.cs
- ConfigPathUtility.cs
- login.cs
- DesignerTransactionCloseEvent.cs
- PartialArray.cs
- MimeWriter.cs
- MenuCommand.cs
- ConsoleCancelEventArgs.cs
- SplitterPanel.cs
- MappingMetadataHelper.cs
- SqlClientPermission.cs
- AbandonedMutexException.cs
- CultureTableRecord.cs
- WebResponse.cs
- ContractsBCL.cs
- WebContext.cs
- FixedSOMPage.cs
- BindingNavigator.cs
- ArrayTypeMismatchException.cs
- UriSection.cs
- CompensationDesigner.cs
- ButtonAutomationPeer.cs
- ClientFormsIdentity.cs
- _RegBlobWebProxyDataBuilder.cs
- HtmlInputImage.cs
- SendActivityDesignerTheme.cs
- HtmlInputText.cs
- NavigationExpr.cs
- CTreeGenerator.cs
- PageCache.cs
- SafeRightsManagementEnvironmentHandle.cs
- InstanceOwner.cs
- DrawingContextDrawingContextWalker.cs
- WindowsSolidBrush.cs
- CacheSection.cs
- LogLogRecord.cs
- DetailsViewUpdatedEventArgs.cs
- GradientStop.cs
- DictionaryEditChange.cs
- DialogResultConverter.cs
- WCFModelStrings.Designer.cs
- CapabilitiesSection.cs
- PackUriHelper.cs
- TreeNodeMouseHoverEvent.cs
- EncoderParameter.cs
- unsafeIndexingFilterStream.cs
- LocatorPartList.cs
- WebPartDescriptionCollection.cs
- PointIndependentAnimationStorage.cs
- InfoCardBaseException.cs
- BuildProvidersCompiler.cs
- TraceHandler.cs
- TreeViewItem.cs
- MenuItem.cs
- SafeNativeMethods.cs
- BitVector32.cs
- Int16Converter.cs
- FileRegion.cs
- SqlMetaData.cs
- AttributeExtensions.cs
- shaperfactoryquerycacheentry.cs
- PictureBox.cs
- ZipPackagePart.cs
- EnvironmentPermission.cs
- CollectionBase.cs
- XpsFilter.cs
- ZipIOLocalFileDataDescriptor.cs
- EventDescriptor.cs
- Stackframe.cs
- InternalDuplexBindingElement.cs
- FixedFindEngine.cs
- OpenTypeLayout.cs
- ProviderSettings.cs
- EntityCommand.cs
- AmbientValueAttribute.cs
- ImportContext.cs
- OdbcUtils.cs
- SerializationStore.cs
- GlyphElement.cs
- Tablet.cs
- WmlFormAdapter.cs
- AccessDataSourceView.cs
- ContextMenuAutomationPeer.cs
- KeyConstraint.cs
- documentsequencetextview.cs
- DrawingGroupDrawingContext.cs
- ColorConvertedBitmapExtension.cs
- CapabilitiesState.cs
- FastEncoderWindow.cs
- ConfigPathUtility.cs