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
- ControlValuePropertyAttribute.cs
- PreservationFileWriter.cs
- JournalEntry.cs
- AnonymousIdentificationSection.cs
- Converter.cs
- ImageListUtils.cs
- XmlLoader.cs
- EditingCoordinator.cs
- ListSortDescription.cs
- FormViewInsertEventArgs.cs
- WindowsAuthenticationEventArgs.cs
- FactoryGenerator.cs
- CacheOutputQuery.cs
- SystemKeyConverter.cs
- EmptyStringExpandableObjectConverter.cs
- XMLSchema.cs
- TextSegment.cs
- EntryWrittenEventArgs.cs
- CrossSiteScriptingValidation.cs
- ConstraintCollection.cs
- BooleanExpr.cs
- PermissionSet.cs
- XmlWriterTraceListener.cs
- MarkupObject.cs
- XXXInfos.cs
- autovalidator.cs
- ViewStateModeByIdAttribute.cs
- AndCondition.cs
- Interlocked.cs
- CodeDomSerializerException.cs
- SmtpNegotiateAuthenticationModule.cs
- Timer.cs
- CodeGotoStatement.cs
- ACE.cs
- RotationValidation.cs
- KnownTypeHelper.cs
- MessageDecoder.cs
- Odbc32.cs
- EtwProvider.cs
- XmlSchemaIdentityConstraint.cs
- ExtendedProtectionPolicyElement.cs
- Label.cs
- Pens.cs
- UnitySerializationHolder.cs
- VideoDrawing.cs
- FlowchartSizeFeature.cs
- XamlPoint3DCollectionSerializer.cs
- ProcessHostServerConfig.cs
- ResourceSetExpression.cs
- ResolveInfo.cs
- CommandHelpers.cs
- SspiHelper.cs
- SqlCacheDependencyDatabase.cs
- ControlValuePropertyAttribute.cs
- SqlProviderManifest.cs
- TextRangeEditTables.cs
- MarkerProperties.cs
- StringComparer.cs
- Material.cs
- ReceiveActivity.cs
- RefreshPropertiesAttribute.cs
- WindowClosedEventArgs.cs
- ErrorWrapper.cs
- TableCell.cs
- XmlSchemaSimpleTypeList.cs
- HttpModulesSection.cs
- PropertyChangedEventManager.cs
- FixedPosition.cs
- SafeNativeMethods.cs
- PtsContext.cs
- RangeBaseAutomationPeer.cs
- DataColumnPropertyDescriptor.cs
- TriggerActionCollection.cs
- BadImageFormatException.cs
- SettingsPropertyIsReadOnlyException.cs
- EntityViewGenerator.cs
- FrameworkObject.cs
- DBConnection.cs
- PageBuildProvider.cs
- RecordConverter.cs
- ObjectCloneHelper.cs
- Int32CAMarshaler.cs
- UnmanagedMemoryStream.cs
- AnnotationDocumentPaginator.cs
- MenuBindingsEditorForm.cs
- TreeIterator.cs
- ExpandableObjectConverter.cs
- ReverseComparer.cs
- CodeExporter.cs
- WebBrowsableAttribute.cs
- HwndAppCommandInputProvider.cs
- FilteredDataSetHelper.cs
- TemplateKey.cs
- HtmlControlPersistable.cs
- DataGridHelper.cs
- ElementsClipboardData.cs
- ClientUrlResolverWrapper.cs
- VideoDrawing.cs
- SapiGrammar.cs
- Popup.cs