Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / System / Windows / Media / Effects / BitmapEffectvisualstate.cs / 1 / BitmapEffectvisualstate.cs
//------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, 2005 // // File: BitmapEffectVisualState.cs //----------------------------------------------------------------------------- using System; using System.Windows.Threading; using MS.Win32; using System.Security; using System.Security.Permissions; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Composition; using System.Windows.Media.Imaging; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using MS.Internal; using System.Resources; using MS.Utility; using System.Runtime.InteropServices; using MS.Internal.PresentationCore; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; namespace System.Windows.Media.Effects { ////// This class is used to realize the content of the /// visual if a bitmap effect is applied to it /// internal class BitmapEffectContent : IRealizationContextClient { Visual _visual; List_channels; public BitmapEffectContent(Visual v, RealizationContext ctx) { _visual = v; _channels = ctx.Channels; } public void ExecuteRealizationsUpdate() { Visual.BitmapEffectStateField.GetValue(_visual).RenderBitmapEffect(_visual, _channels); } } /// /// /// internal class BitmapEffectVisualState : BitmapEffectState { public BitmapEffectVisualState() { } public BitmapEffectDrawing BitmapEffectDrawing { get { if (_bitmapEffectDrawing == null) { _bitmapEffectDrawing = new BitmapEffectDrawing(); } return _bitmapEffectDrawing; } set { _bitmapEffectDrawing = null; } } ////// Remove the content from the composition node /// /// /// internal void FreeContent(Visual visual, DUCE.Channel channel) { SetContent(null, visual, channel); _bitmapEffectDrawing = null; } ////// This sets the content of the visual if there is a /// bitmap effect applied to it /// /// drawing content /// The visual /// The channel internal void SetContent(IDrawingContent content, Visual visual, DUCE.Channel channel) { DUCE.ResourceHandle visualHandle = ((DUCE.IResource)visual).GetHandle(channel); if (content != null) { content.AddRefOnChannel(channel); DUCE.CompositionNode.SetContent( visualHandle, content.GetHandle(channel), channel); // it is ok to release here, because the unmanaged code // holds a reference to the content and will release it // when the parent object is released or the content // is reset to null content.ReleaseOnChannel(channel); } else { Debug.Assert(visual.IsOnChannel(channel)); DUCE.CompositionNode.SetContent( visualHandle, DUCE.ResourceHandle.Null, channel); } } ////// This methods renders the visual to a bitmap, then applies /// the effect to the rendered bitmap, and sets the content /// of the visual to be the resulting bitmap /// /// The visual to apply the effect to /// The current channels internal void RenderBitmapEffect(Visual visual, Listchannels) { if (_bitmapEffect == null) throw new InvalidOperationException(SR.Get(SRID.Visual_No_Effect, null)); Debug.Assert(channels.Count >= 1); Debug.Assert(channels[0].Channel != null); BitmapEffectDrawing.UpdateTransformAndDrawingLists(true); bool effectRendered = false; int drawingsCount = BitmapEffectDrawing.Drawings.Count; for (int iTransform = BitmapEffectDrawing.WorldTransforms.Count - 1; iTransform >= drawingsCount; iTransform--) { Matrix finalTransform = BitmapEffectDrawing.WorldTransforms[iTransform].Value; BitmapSource outputImage = GetEffectOutput(visual, ref _renderBitmap, finalTransform, BitmapEffectDrawing.WindowClip, out finalTransform); if (outputImage != null) { // if there was no group for that transform create one // and update it, otherwise we don't need to do anything it // NOTE: this is ok to update here since it is not // connected to the visual tree DrawingGroup effectGroup = new DrawingGroup(); effectGroup.Children.Add( new ImageDrawing(outputImage, new Rect(0, 0, outputImage.Width, outputImage.Height))); effectGroup.Transform = new MatrixTransform(finalTransform); BitmapEffectDrawing.Drawings.Insert(drawingsCount, effectGroup); effectRendered = true; } else { BitmapEffectDrawing.WorldTransforms.RemoveAt(iTransform); } } if (BitmapEffectDrawing.Drawings.Count > 0 && effectRendered == true) { foreach(DUCE.ChannelSet channelSet in channels) { SetContent(BitmapEffectDrawing, visual, channelSet.Channel); } } // reset the dirty flag // we have already rendered the visual and applied the effect foreach (DUCE.ChannelSet channelSet in channels) { visual.SetFlags(channelSet.Channel, false, VisualProxyFlags.IsBitmapEffectDirty); } BitmapEffectDrawing.ScheduleForUpdates = true; } #region Private Fields BitmapEffectDrawing _bitmapEffectDrawing; RenderTargetBitmap _renderBitmap; #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
- DataSourceBooleanViewSchemaConverter.cs
- CompilerErrorCollection.cs
- TimeSpan.cs
- odbcmetadatacolumnnames.cs
- HtmlInputImage.cs
- ConfigurationSettings.cs
- TableLayoutColumnStyleCollection.cs
- TextTrailingWordEllipsis.cs
- ClientConvert.cs
- EventSourceCreationData.cs
- TableStyle.cs
- WSSecurityPolicy11.cs
- SrgsDocumentParser.cs
- HealthMonitoringSection.cs
- ToolStripPanelRenderEventArgs.cs
- IOException.cs
- AsyncStreamReader.cs
- FileSecurity.cs
- ManagementClass.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- __ConsoleStream.cs
- WebPartsSection.cs
- HistoryEventArgs.cs
- SizeAnimationUsingKeyFrames.cs
- Misc.cs
- GridViewCancelEditEventArgs.cs
- XPathConvert.cs
- AnonymousIdentificationModule.cs
- InternalSafeNativeMethods.cs
- SqlCacheDependencyDatabaseCollection.cs
- DynamicFilterExpression.cs
- DetailsViewUpdatedEventArgs.cs
- SoapMessage.cs
- EdmToObjectNamespaceMap.cs
- FieldMetadata.cs
- Pkcs7Recipient.cs
- AnnotationResource.cs
- SettingsPropertyWrongTypeException.cs
- PartialCachingAttribute.cs
- SqlDataSourceConfigureFilterForm.cs
- ServiceModelDictionary.cs
- EntityCommand.cs
- WorkflowTransactionOptions.cs
- BuildProvider.cs
- DiffuseMaterial.cs
- StreamGeometry.cs
- WindowsPrincipal.cs
- xmlfixedPageInfo.cs
- OdbcRowUpdatingEvent.cs
- ContainsRowNumberChecker.cs
- securestring.cs
- SingleStorage.cs
- DocumentEventArgs.cs
- ToolboxComponentsCreatedEventArgs.cs
- _ListenerAsyncResult.cs
- DefinitionUpdate.cs
- BoundConstants.cs
- GetWinFXPath.cs
- WindowsStatusBar.cs
- TableRow.cs
- NodeFunctions.cs
- DesignerForm.cs
- SecurityDescriptor.cs
- TransformProviderWrapper.cs
- XhtmlBasicLiteralTextAdapter.cs
- ElementsClipboardData.cs
- COM2PropertyDescriptor.cs
- DataListCommandEventArgs.cs
- HeaderPanel.cs
- TimeSpanConverter.cs
- SectionXmlInfo.cs
- XamlPointCollectionSerializer.cs
- CompositionCommandSet.cs
- ZipPackagePart.cs
- XmlBinaryWriter.cs
- LoginViewDesigner.cs
- DesignParameter.cs
- TypedTableBaseExtensions.cs
- MetadataArtifactLoaderResource.cs
- ZoneLinkButton.cs
- DataGridViewCellStyleChangedEventArgs.cs
- SessionSwitchEventArgs.cs
- TableCell.cs
- DelayedRegex.cs
- ListBase.cs
- DisplayMemberTemplateSelector.cs
- ProxyHelper.cs
- SizeChangedInfo.cs
- EntityContainerEntitySet.cs
- TextTreeFixupNode.cs
- UIElementPropertyUndoUnit.cs
- ServicePointManagerElement.cs
- ExpanderAutomationPeer.cs
- MenuItemBinding.cs
- WindowsRichEditRange.cs
- XamlGridLengthSerializer.cs
- FactoryId.cs
- HtmlInputImage.cs
- SourceFilter.cs
- LoginName.cs