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 / ColorConvertedBitmap.cs / 1 / ColorConvertedBitmap.cs
//------------------------------------------------------------------------------
// Microsoft Avalon
// Copyright (c) Microsoft Corporation. All Rights Reserved.
//
// File: ColorConvertedBitmap.cs
//
//-----------------------------------------------------------------------------
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using MS.Internal;
using MS.Win32.PresentationCore;
using System.Security;
using System.Security.Permissions;
using System.Diagnostics;
using System.Windows.Media;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Windows.Media.Animation;
using System.Windows.Media.Composition;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Media.Imaging
{
#region ColorConvertedBitmap
///
/// ColorConvertedBitmap provides caching functionality for a BitmapSource.
///
public sealed partial class ColorConvertedBitmap : Imaging.BitmapSource, ISupportInitialize
{
///
/// Constructor
///
public ColorConvertedBitmap() : base(true)
{
}
///
/// Construct a ColorConvertedBitmap
///
/// Input BitmapSource to color convert
/// Source Color Context
/// Destination Color Context
/// Destination Pixel format
public ColorConvertedBitmap(BitmapSource source, ColorContext sourceColorContext, ColorContext destinationColorContext, PixelFormat format)
: base(true) // Use base class virtuals
{
if (source == null)
{
throw new ArgumentNullException("source");
}
if (sourceColorContext == null)
{
throw new ArgumentNullException("sourceColorContext");
}
if (destinationColorContext == null)
{
throw new ArgumentNullException("destinationColorContext");
}
_bitmapInit.BeginInit();
Source = source;
SourceColorContext = sourceColorContext;
DestinationColorContext = destinationColorContext;
DestinationFormat = format;
_bitmapInit.EndInit();
FinalizeCreation();
}
// ISupportInitialize
///
/// Prepare the bitmap to accept initialize paramters.
///
public void BeginInit()
{
WritePreamble();
_bitmapInit.BeginInit();
}
///
/// Prepare the bitmap to accept initialize paramters.
///
///
/// Critical - access critical resources
/// PublicOK - All inputs verified
///
[SecurityCritical ]
public void EndInit()
{
WritePreamble();
_bitmapInit.EndInit();
if (Source == null)
{
throw new InvalidOperationException(SR.Get(SRID.Image_NoArgument, "Source"));
}
if ( SourceColorContext == null)
{
throw new InvalidOperationException(SR.Get(SRID.Color_NullColorContext));
}
if (DestinationColorContext == null)
{
throw new InvalidOperationException(SR.Get(SRID.Image_NoArgument, "DestinationColorContext"));
}
FinalizeCreation();
}
private void ClonePrequel(ColorConvertedBitmap otherColorConvertedBitmap)
{
BeginInit();
}
private void ClonePostscript(ColorConvertedBitmap otherColorConvertedBitmap)
{
EndInit();
}
///
/// Create the unmanaged resources
///
///
/// Critical - access critical resource
///
[SecurityCritical]
internal override void FinalizeCreation()
{
_bitmapInit.EnsureInitializedComplete();
BitmapSourceSafeMILHandle wicConverter = null;
HRESULT.Check(UnsafeNativeMethods.WICCodec.CreateColorTransform(
out wicConverter));
lock (_syncObject)
{
Guid fmtDestFmt = DestinationFormat.Guid;
HRESULT.Check(UnsafeNativeMethods.WICColorTransform.Initialize(
wicConverter,
Source.WicSourceHandle,
SourceColorContext.ColorContextHandle,
DestinationColorContext.ColorContextHandle,
ref fmtDestFmt));
}
WicSourceHandle = wicConverter;
_isSourceCached = Source.IsSourceCached;
CreationCompleted = true;
UpdateCachedSettings();
}
///
/// Notification on source changing.
///
private void SourcePropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
BitmapSource newSource = e.NewValue as BitmapSource;
_source = newSource;
_syncObject = (newSource != null) ? newSource.SyncObject : _bitmapInit;
}
}
///
/// Notification on source colorcontext changing.
///
private void SourceColorContextPropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
_sourceColorContext = e.NewValue as ColorContext;
}
}
///
/// Notification on destination colorcontext changing.
///
private void DestinationColorContextPropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
_destinationColorContext = e.NewValue as ColorContext;
}
}
///
/// Notification on destination format changing.
///
private void DestinationFormatPropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
_destinationFormat = (PixelFormat)e.NewValue;
}
}
///
/// Coerce Source
///
private static object CoerceSource(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._source;
}
else
{
return value;
}
}
///
/// Coerce SourceColorContext
///
private static object CoerceSourceColorContext(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._sourceColorContext;
}
else
{
return value;
}
}
///
/// Coerce DestinationColorContext
///
private static object CoerceDestinationColorContext(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._destinationColorContext;
}
else
{
return value;
}
}
///
/// Coerce DestinationFormat
///
private static object CoerceDestinationFormat(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._destinationFormat;
}
else
{
return value;
}
}
#region Data members
private BitmapSource _source;
private ColorContext _sourceColorContext;
private ColorContext _destinationColorContext;
private PixelFormat _destinationFormat;
#endregion
}
#endregion // ColorConvertedBitmap
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
// Microsoft Avalon
// Copyright (c) Microsoft Corporation. All Rights Reserved.
//
// File: ColorConvertedBitmap.cs
//
//-----------------------------------------------------------------------------
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using MS.Internal;
using MS.Win32.PresentationCore;
using System.Security;
using System.Security.Permissions;
using System.Diagnostics;
using System.Windows.Media;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Windows.Media.Animation;
using System.Windows.Media.Composition;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Media.Imaging
{
#region ColorConvertedBitmap
///
/// ColorConvertedBitmap provides caching functionality for a BitmapSource.
///
public sealed partial class ColorConvertedBitmap : Imaging.BitmapSource, ISupportInitialize
{
///
/// Constructor
///
public ColorConvertedBitmap() : base(true)
{
}
///
/// Construct a ColorConvertedBitmap
///
/// Input BitmapSource to color convert
/// Source Color Context
/// Destination Color Context
/// Destination Pixel format
public ColorConvertedBitmap(BitmapSource source, ColorContext sourceColorContext, ColorContext destinationColorContext, PixelFormat format)
: base(true) // Use base class virtuals
{
if (source == null)
{
throw new ArgumentNullException("source");
}
if (sourceColorContext == null)
{
throw new ArgumentNullException("sourceColorContext");
}
if (destinationColorContext == null)
{
throw new ArgumentNullException("destinationColorContext");
}
_bitmapInit.BeginInit();
Source = source;
SourceColorContext = sourceColorContext;
DestinationColorContext = destinationColorContext;
DestinationFormat = format;
_bitmapInit.EndInit();
FinalizeCreation();
}
// ISupportInitialize
///
/// Prepare the bitmap to accept initialize paramters.
///
public void BeginInit()
{
WritePreamble();
_bitmapInit.BeginInit();
}
///
/// Prepare the bitmap to accept initialize paramters.
///
///
/// Critical - access critical resources
/// PublicOK - All inputs verified
///
[SecurityCritical ]
public void EndInit()
{
WritePreamble();
_bitmapInit.EndInit();
if (Source == null)
{
throw new InvalidOperationException(SR.Get(SRID.Image_NoArgument, "Source"));
}
if ( SourceColorContext == null)
{
throw new InvalidOperationException(SR.Get(SRID.Color_NullColorContext));
}
if (DestinationColorContext == null)
{
throw new InvalidOperationException(SR.Get(SRID.Image_NoArgument, "DestinationColorContext"));
}
FinalizeCreation();
}
private void ClonePrequel(ColorConvertedBitmap otherColorConvertedBitmap)
{
BeginInit();
}
private void ClonePostscript(ColorConvertedBitmap otherColorConvertedBitmap)
{
EndInit();
}
///
/// Create the unmanaged resources
///
///
/// Critical - access critical resource
///
[SecurityCritical]
internal override void FinalizeCreation()
{
_bitmapInit.EnsureInitializedComplete();
BitmapSourceSafeMILHandle wicConverter = null;
HRESULT.Check(UnsafeNativeMethods.WICCodec.CreateColorTransform(
out wicConverter));
lock (_syncObject)
{
Guid fmtDestFmt = DestinationFormat.Guid;
HRESULT.Check(UnsafeNativeMethods.WICColorTransform.Initialize(
wicConverter,
Source.WicSourceHandle,
SourceColorContext.ColorContextHandle,
DestinationColorContext.ColorContextHandle,
ref fmtDestFmt));
}
WicSourceHandle = wicConverter;
_isSourceCached = Source.IsSourceCached;
CreationCompleted = true;
UpdateCachedSettings();
}
///
/// Notification on source changing.
///
private void SourcePropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
BitmapSource newSource = e.NewValue as BitmapSource;
_source = newSource;
_syncObject = (newSource != null) ? newSource.SyncObject : _bitmapInit;
}
}
///
/// Notification on source colorcontext changing.
///
private void SourceColorContextPropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
_sourceColorContext = e.NewValue as ColorContext;
}
}
///
/// Notification on destination colorcontext changing.
///
private void DestinationColorContextPropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
_destinationColorContext = e.NewValue as ColorContext;
}
}
///
/// Notification on destination format changing.
///
private void DestinationFormatPropertyChangedHook(DependencyPropertyChangedEventArgs e)
{
if (!e.IsASubPropertyChange)
{
_destinationFormat = (PixelFormat)e.NewValue;
}
}
///
/// Coerce Source
///
private static object CoerceSource(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._source;
}
else
{
return value;
}
}
///
/// Coerce SourceColorContext
///
private static object CoerceSourceColorContext(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._sourceColorContext;
}
else
{
return value;
}
}
///
/// Coerce DestinationColorContext
///
private static object CoerceDestinationColorContext(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._destinationColorContext;
}
else
{
return value;
}
}
///
/// Coerce DestinationFormat
///
private static object CoerceDestinationFormat(DependencyObject d, object value)
{
ColorConvertedBitmap bitmap = (ColorConvertedBitmap)d;
if (!bitmap._bitmapInit.IsInInit)
{
return bitmap._destinationFormat;
}
else
{
return value;
}
}
#region Data members
private BitmapSource _source;
private ColorContext _sourceColorContext;
private ColorContext _destinationColorContext;
private PixelFormat _destinationFormat;
#endregion
}
#endregion // ColorConvertedBitmap
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AddressingProperty.cs
- DescriptionAttribute.cs
- GeometryCombineModeValidation.cs
- EntityTemplateUserControl.cs
- FormsAuthenticationUser.cs
- EncryptedPackage.cs
- PreProcessInputEventArgs.cs
- unsafenativemethodsother.cs
- NullableDecimalAverageAggregationOperator.cs
- StrongNameMembershipCondition.cs
- SoapInteropTypes.cs
- TextBoxAutomationPeer.cs
- ForEachDesigner.xaml.cs
- FlowDocumentPage.cs
- assemblycache.cs
- FigureHelper.cs
- XmlSchemaObject.cs
- DBSchemaRow.cs
- WorkflowMarkupSerializationProvider.cs
- ClientTargetCollection.cs
- XmlSortKey.cs
- ServerValidateEventArgs.cs
- _UriTypeConverter.cs
- BinaryObjectReader.cs
- OleDbErrorCollection.cs
- ClearCollection.cs
- RelationshipDetailsRow.cs
- BitConverter.cs
- GregorianCalendarHelper.cs
- HttpProfileGroupBase.cs
- WindowsStatusBar.cs
- ColorConvertedBitmapExtension.cs
- _NetworkingPerfCounters.cs
- InProcStateClientManager.cs
- Label.cs
- InProcStateClientManager.cs
- CodeActivityMetadata.cs
- ReadWriteSpinLock.cs
- ChannelTerminatedException.cs
- CompositeScriptReference.cs
- QilGenerator.cs
- ToolStripItemCollection.cs
- StrongTypingException.cs
- CollectionType.cs
- IfAction.cs
- SatelliteContractVersionAttribute.cs
- ImportCatalogPart.cs
- PropertyPushdownHelper.cs
- Size.cs
- FileSecurity.cs
- PasswordBoxAutomationPeer.cs
- RuntimeEnvironment.cs
- TabletDevice.cs
- OleDbCommandBuilder.cs
- Renderer.cs
- SHA512.cs
- HitTestResult.cs
- JournalEntryListConverter.cs
- AlignmentYValidation.cs
- XmlSchemaCompilationSettings.cs
- CTreeGenerator.cs
- DataGridRelationshipRow.cs
- FormViewInsertEventArgs.cs
- WindowsComboBox.cs
- StringHandle.cs
- TransactionTraceIdentifier.cs
- CollaborationHelperFunctions.cs
- PrintDialog.cs
- DataGridViewCell.cs
- Boolean.cs
- XsdDateTime.cs
- XmlCountingReader.cs
- PrePrepareMethodAttribute.cs
- DnsPermission.cs
- AttributeData.cs
- RecommendedAsConfigurableAttribute.cs
- SpeechEvent.cs
- ContentType.cs
- QueryableDataSourceView.cs
- WebDisplayNameAttribute.cs
- WinOEToolBoxItem.cs
- AuthenticationServiceManager.cs
- WebConfigurationFileMap.cs
- GridViewSelectEventArgs.cs
- TreeNodeCollectionEditorDialog.cs
- DoubleAnimation.cs
- WebServiceTypeData.cs
- WebSysDescriptionAttribute.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- RangeBaseAutomationPeer.cs
- AccessDataSourceView.cs
- RowsCopiedEventArgs.cs
- Keywords.cs
- CodeDomLocalizationProvider.cs
- BinaryFormatterWriter.cs
- TextSerializer.cs
- XmlQualifiedName.cs
- EndpointAddressMessageFilter.cs
- PersonalizationDictionary.cs
- NumericUpDownAcceleration.cs