ImageDrawing.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media / ImageDrawing.cs / 1 / ImageDrawing.cs

                            //---------------------------------------------------------------------------- 
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// Description: ImageDrawing represents a drawing operation that renders 
//              an image into a destination rectangle.
// 
// History: 
//
//  2004/11/17 : timothyc - Created it. 
//
//---------------------------------------------------------------------------

using System.Diagnostics; 
using System.Windows.Media.Imaging;
using MS.Internal; 
 
namespace System.Windows.Media
{ 
    /// 
    /// ImageDrawing represents a drawing operation that renders an image into
    /// a destination rectangle
    ///  
    public sealed partial class ImageDrawing : Drawing
    { 
        #region Constructors 

        ///  
        /// Default ImageDrawing constructor.
        /// Constructs an object with all properties set to their default values
        /// 
        public ImageDrawing() 
        {
        } 
 
        /// 
        /// Two-argument ImageDrawing constructor. 
        /// Constructs an object with the ImageSource and Rect properties
        /// set to the value of their respective arguments.
        /// 
        public ImageDrawing(ImageSource imageSource, Rect rect) 
        {
            ImageSource = imageSource; 
            Rect = rect; 
        }
 
        #endregion

        #region Internal methods
 
        /// 
        /// Calls methods on the DrawingContext that are equivalent to the 
        /// Drawing with the Drawing's current value. 
        /// 
        internal override void WalkCurrentValue(DrawingContextWalker ctx) 
        {
            // We avoid unneccessary ShouldStopWalking checks based on assumptions
            // about when ShouldStopWalking is set.  Guard that assumption with an
            // assertion.  See DrawingGroup.WalkCurrentValue comment for more details. 

            ctx.DrawImage( 
                ImageSource, 
                Rect
                ); 
        }

        /// 
        /// Image drawings require realization updates if the image source is a DrawingImage. 
        /// 
        internal override void PrecomputeCore() 
        { 
            ImageSource source = ImageSource;
 
            if (source != null)
            {
                source.Precompute();
                RequiresRealizationUpdates = source.RequiresRealizationUpdates; 
            }
            else 
            { 
                RequiresRealizationUpdates = false;
            } 
        }


        ///  
        /// Pushes realization updates into DrawingImage ImageSources.
        ///  
        internal override void UpdateRealizations(RealizationContext realizationContext) 
        {
            if (RequiresRealizationUpdates) 
            {
                ImageSource imageSource = ImageSource;
                Debug.Assert(imageSource != null, "Otherwise RequiresRealizationUpdates would be false.");
 
                Rect rectangle = Rect;
                Size imageSize = imageSource.Size; 
 
                if (!DoubleUtil.AreClose(imageSize.Width, 0) &&
                    !DoubleUtil.AreClose(imageSize.Height, 0)) 
                {
                    Matrix scale = Matrix.CreateScaling(
                    rectangle.Width / imageSize.Width,
                    rectangle.Height / imageSize.Height); 

                    realizationContext.TransformStack.Push(ref scale, true); 
 
                    imageSource.UpdateRealizations(realizationContext);
 
                    realizationContext.TransformStack.Pop();
                }

            } 
        }
        #endregion Internal methods 
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------------- 
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// Description: ImageDrawing represents a drawing operation that renders 
//              an image into a destination rectangle.
// 
// History: 
//
//  2004/11/17 : timothyc - Created it. 
//
//---------------------------------------------------------------------------

using System.Diagnostics; 
using System.Windows.Media.Imaging;
using MS.Internal; 
 
namespace System.Windows.Media
{ 
    /// 
    /// ImageDrawing represents a drawing operation that renders an image into
    /// a destination rectangle
    ///  
    public sealed partial class ImageDrawing : Drawing
    { 
        #region Constructors 

        ///  
        /// Default ImageDrawing constructor.
        /// Constructs an object with all properties set to their default values
        /// 
        public ImageDrawing() 
        {
        } 
 
        /// 
        /// Two-argument ImageDrawing constructor. 
        /// Constructs an object with the ImageSource and Rect properties
        /// set to the value of their respective arguments.
        /// 
        public ImageDrawing(ImageSource imageSource, Rect rect) 
        {
            ImageSource = imageSource; 
            Rect = rect; 
        }
 
        #endregion

        #region Internal methods
 
        /// 
        /// Calls methods on the DrawingContext that are equivalent to the 
        /// Drawing with the Drawing's current value. 
        /// 
        internal override void WalkCurrentValue(DrawingContextWalker ctx) 
        {
            // We avoid unneccessary ShouldStopWalking checks based on assumptions
            // about when ShouldStopWalking is set.  Guard that assumption with an
            // assertion.  See DrawingGroup.WalkCurrentValue comment for more details. 

            ctx.DrawImage( 
                ImageSource, 
                Rect
                ); 
        }

        /// 
        /// Image drawings require realization updates if the image source is a DrawingImage. 
        /// 
        internal override void PrecomputeCore() 
        { 
            ImageSource source = ImageSource;
 
            if (source != null)
            {
                source.Precompute();
                RequiresRealizationUpdates = source.RequiresRealizationUpdates; 
            }
            else 
            { 
                RequiresRealizationUpdates = false;
            } 
        }


        ///  
        /// Pushes realization updates into DrawingImage ImageSources.
        ///  
        internal override void UpdateRealizations(RealizationContext realizationContext) 
        {
            if (RequiresRealizationUpdates) 
            {
                ImageSource imageSource = ImageSource;
                Debug.Assert(imageSource != null, "Otherwise RequiresRealizationUpdates would be false.");
 
                Rect rectangle = Rect;
                Size imageSize = imageSource.Size; 
 
                if (!DoubleUtil.AreClose(imageSize.Width, 0) &&
                    !DoubleUtil.AreClose(imageSize.Height, 0)) 
                {
                    Matrix scale = Matrix.CreateScaling(
                    rectangle.Width / imageSize.Width,
                    rectangle.Height / imageSize.Height); 

                    realizationContext.TransformStack.Push(ref scale, true); 
 
                    imageSource.UpdateRealizations(realizationContext);
 
                    realizationContext.TransformStack.Pop();
                }

            } 
        }
        #endregion Internal methods 
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK