Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / ColorConvertedBitmapExtension.cs / 1305600 / ColorConvertedBitmapExtension.cs
/****************************************************************************\
*
* File: ColorConvertedBitmapExtension.cs
*
* Class for Xaml markup extension for static resource references.
*
* Copyright (C) 2004 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
using System;
using System.IO;
using System.Collections;
using System.Diagnostics;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Reflection;
using MS.Internal;
namespace System.Windows
{
///
/// Class for Xaml markup extension for ColorConvertedBitmap with non-embedded profile.
///
[MarkupExtensionReturnType(typeof(ColorConvertedBitmap))]
public class ColorConvertedBitmapExtension : MarkupExtension
{
///
/// Constructor that takes no parameters
///
public ColorConvertedBitmapExtension()
{
}
///
/// Constructor that takes the markup for a "{ColorConvertedBitmap image source.icc destination.icc}"
///
public ColorConvertedBitmapExtension(
object image)
{
if (image == null)
{
throw new ArgumentNullException("image");
}
string[] tokens = ((string)image).Split(new char[] { ' ' });
foreach (string str in tokens)
{
if (str.Length > 0)
{
if (_image == null)
{
_image = str;
}
else if (_sourceProfile == null)
{
_sourceProfile = str;
}
else if (_destinationProfile == null)
{
_destinationProfile = str;
}
else
{
throw new InvalidOperationException(SR.Get(SRID.ColorConvertedBitmapExtensionSyntax));
}
}
}
}
///
/// Return an object that should be set on the targetObject's targetProperty
/// for this markup extension. For ColorConvertedBitmapExtension, this is the object found in
/// a resource dictionary in the current parent chain that is keyed by ResourceKey
///
///
/// The object to set on this property.
///
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_image == null)
{
throw new InvalidOperationException(SR.Get(SRID.ColorConvertedBitmapExtensionNoSourceImage));
}
if (_sourceProfile == null)
{
throw new InvalidOperationException(SR.Get(SRID.ColorConvertedBitmapExtensionNoSourceProfile));
}
// [BreakingChange] Dev10 Bug #454108
// We really should throw an ArgumentNullException here for serviceProvider.
// Save away the BaseUri.
IUriContext uriContext = serviceProvider.GetService(typeof(IUriContext)) as IUriContext;
if( uriContext == null )
{
throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IUriContext" ));
}
_baseUri = uriContext.BaseUri;
Uri imageUri = GetResolvedUri(_image);
Uri sourceProfileUri = GetResolvedUri(_sourceProfile);
Uri destinationProfileUri = GetResolvedUri(_destinationProfile);
ColorContext sourceContext = new ColorContext(sourceProfileUri);
ColorContext destinationContext = destinationProfileUri != null ?
new ColorContext(destinationProfileUri) :
new ColorContext(PixelFormats.Default);
BitmapDecoder decoder = BitmapDecoder.Create(
imageUri,
BitmapCreateOptions.IgnoreColorProfile | BitmapCreateOptions.IgnoreImageCache,
BitmapCacheOption.None
);
BitmapSource bitmap = decoder.Frames[0];
FormatConvertedBitmap formatConverted = new FormatConvertedBitmap(bitmap, PixelFormats.Bgra32, null, 0.0);
object result = formatConverted;
try
{
ColorConvertedBitmap colorConverted = new ColorConvertedBitmap(formatConverted, sourceContext, destinationContext, PixelFormats.Bgra32);
result= colorConverted;
}
catch (FileFormatException)
{ // Gracefully ignore non-matching profile
// If the file contains a bad color context, we catch the exception here
// since color transform isn't possible
// with the given color context.
}
return result;
}
private Uri GetResolvedUri(string uri)
{
if (uri == null)
{
return null;
}
return new Uri(_baseUri,uri);
}
string _image;
string _sourceProfile;
Uri _baseUri;
string _destinationProfile;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
/****************************************************************************\
*
* File: ColorConvertedBitmapExtension.cs
*
* Class for Xaml markup extension for static resource references.
*
* Copyright (C) 2004 by Microsoft Corporation. All rights reserved.
*
\***************************************************************************/
using System;
using System.IO;
using System.Collections;
using System.Diagnostics;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Reflection;
using MS.Internal;
namespace System.Windows
{
///
/// Class for Xaml markup extension for ColorConvertedBitmap with non-embedded profile.
///
[MarkupExtensionReturnType(typeof(ColorConvertedBitmap))]
public class ColorConvertedBitmapExtension : MarkupExtension
{
///
/// Constructor that takes no parameters
///
public ColorConvertedBitmapExtension()
{
}
///
/// Constructor that takes the markup for a "{ColorConvertedBitmap image source.icc destination.icc}"
///
public ColorConvertedBitmapExtension(
object image)
{
if (image == null)
{
throw new ArgumentNullException("image");
}
string[] tokens = ((string)image).Split(new char[] { ' ' });
foreach (string str in tokens)
{
if (str.Length > 0)
{
if (_image == null)
{
_image = str;
}
else if (_sourceProfile == null)
{
_sourceProfile = str;
}
else if (_destinationProfile == null)
{
_destinationProfile = str;
}
else
{
throw new InvalidOperationException(SR.Get(SRID.ColorConvertedBitmapExtensionSyntax));
}
}
}
}
///
/// Return an object that should be set on the targetObject's targetProperty
/// for this markup extension. For ColorConvertedBitmapExtension, this is the object found in
/// a resource dictionary in the current parent chain that is keyed by ResourceKey
///
///
/// The object to set on this property.
///
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_image == null)
{
throw new InvalidOperationException(SR.Get(SRID.ColorConvertedBitmapExtensionNoSourceImage));
}
if (_sourceProfile == null)
{
throw new InvalidOperationException(SR.Get(SRID.ColorConvertedBitmapExtensionNoSourceProfile));
}
// [BreakingChange] Dev10 Bug #454108
// We really should throw an ArgumentNullException here for serviceProvider.
// Save away the BaseUri.
IUriContext uriContext = serviceProvider.GetService(typeof(IUriContext)) as IUriContext;
if( uriContext == null )
{
throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IUriContext" ));
}
_baseUri = uriContext.BaseUri;
Uri imageUri = GetResolvedUri(_image);
Uri sourceProfileUri = GetResolvedUri(_sourceProfile);
Uri destinationProfileUri = GetResolvedUri(_destinationProfile);
ColorContext sourceContext = new ColorContext(sourceProfileUri);
ColorContext destinationContext = destinationProfileUri != null ?
new ColorContext(destinationProfileUri) :
new ColorContext(PixelFormats.Default);
BitmapDecoder decoder = BitmapDecoder.Create(
imageUri,
BitmapCreateOptions.IgnoreColorProfile | BitmapCreateOptions.IgnoreImageCache,
BitmapCacheOption.None
);
BitmapSource bitmap = decoder.Frames[0];
FormatConvertedBitmap formatConverted = new FormatConvertedBitmap(bitmap, PixelFormats.Bgra32, null, 0.0);
object result = formatConverted;
try
{
ColorConvertedBitmap colorConverted = new ColorConvertedBitmap(formatConverted, sourceContext, destinationContext, PixelFormats.Bgra32);
result= colorConverted;
}
catch (FileFormatException)
{ // Gracefully ignore non-matching profile
// If the file contains a bad color context, we catch the exception here
// since color transform isn't possible
// with the given color context.
}
return result;
}
private Uri GetResolvedUri(string uri)
{
if (uri == null)
{
return null;
}
return new Uri(_baseUri,uri);
}
string _image;
string _sourceProfile;
Uri _baseUri;
string _destinationProfile;
}
}
// 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
- OleStrCAMarshaler.cs
- SystemInfo.cs
- Config.cs
- SignerInfo.cs
- XmlNode.cs
- BookmarkScopeManager.cs
- MessageQueueConverter.cs
- DataGridViewCellParsingEventArgs.cs
- IgnoreFileBuildProvider.cs
- ForwardPositionQuery.cs
- DateTimeValueSerializerContext.cs
- TypeDescriptionProviderAttribute.cs
- RoamingStoreFileUtility.cs
- ImportedNamespaceContextItem.cs
- LinkAreaEditor.cs
- PropertyEmitterBase.cs
- StringResourceManager.cs
- TopClause.cs
- OutputCacheProfileCollection.cs
- BindingContext.cs
- TextEditorTyping.cs
- SqlAliasesReferenced.cs
- Geometry3D.cs
- CustomPopupPlacement.cs
- FolderBrowserDialog.cs
- X509Extension.cs
- BoolLiteral.cs
- DragEvent.cs
- SegmentInfo.cs
- HttpWriter.cs
- ByteFacetDescriptionElement.cs
- BulletChrome.cs
- HttpCacheVaryByContentEncodings.cs
- IteratorDescriptor.cs
- ZoneLinkButton.cs
- AuthorizationRule.cs
- unsafeIndexingFilterStream.cs
- Oid.cs
- XmlValueConverter.cs
- Highlights.cs
- CreateBookmarkScope.cs
- QueryResults.cs
- Rijndael.cs
- OwnerDrawPropertyBag.cs
- AttributeCollection.cs
- DesignerSerializerAttribute.cs
- ToolStripSystemRenderer.cs
- PagesSection.cs
- BindingList.cs
- SystemIPGlobalProperties.cs
- BatchServiceHost.cs
- ImageListStreamer.cs
- DependencyPropertyAttribute.cs
- NoneExcludedImageIndexConverter.cs
- RijndaelManagedTransform.cs
- FixUp.cs
- ObjectQuery_EntitySqlExtensions.cs
- AppDomainProtocolHandler.cs
- RelationshipFixer.cs
- AddressingVersion.cs
- ConsoleCancelEventArgs.cs
- ProfileServiceManager.cs
- dbdatarecord.cs
- SHA512.cs
- SQLCharsStorage.cs
- MaskedTextBoxDesignerActionList.cs
- SqlBinder.cs
- TableItemStyle.cs
- processwaithandle.cs
- InvariantComparer.cs
- DataGridViewCellPaintingEventArgs.cs
- MarkupExtensionParser.cs
- DrawingBrush.cs
- CodeObject.cs
- AnnotationAdorner.cs
- DataGridCaption.cs
- EventNotify.cs
- ValidatedControlConverter.cs
- GradientStopCollection.cs
- XmlLoader.cs
- UIElement3D.cs
- VersionedStream.cs
- Int32RectConverter.cs
- X509Chain.cs
- EventHandlingScope.cs
- AdornerHitTestResult.cs
- ObjectNotFoundException.cs
- InputLangChangeEvent.cs
- ApplicationSecurityInfo.cs
- PieceDirectory.cs
- DocumentSequence.cs
- DataListItemCollection.cs
- EmptyCollection.cs
- ConfigurationException.cs
- XmlChoiceIdentifierAttribute.cs
- TypeDelegator.cs
- Part.cs
- LinqDataSourceDeleteEventArgs.cs
- SplitContainer.cs
- ResourceAssociationSet.cs