Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / System / Windows / ColorConvertedBitmapExtension.cs / 1 / 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));
}
// 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));
}
// 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
- XmlWriterDelegator.cs
- PropertyStore.cs
- Control.cs
- XPathMultyIterator.cs
- SectionRecord.cs
- itemelement.cs
- ShutDownListener.cs
- QueryableDataSourceEditData.cs
- KnownIds.cs
- GenericTextProperties.cs
- MouseWheelEventArgs.cs
- Pointer.cs
- ExpressionPrinter.cs
- ResolveMatchesMessageCD1.cs
- GenericPrincipal.cs
- SqlFlattener.cs
- behaviorssection.cs
- ReadOnlyDataSource.cs
- WindowProviderWrapper.cs
- HtmlElementErrorEventArgs.cs
- TreeView.cs
- PeerName.cs
- EventLogPropertySelector.cs
- LoginView.cs
- querybuilder.cs
- WindowsListViewScroll.cs
- SQLDateTimeStorage.cs
- RelationshipSet.cs
- Span.cs
- RequestCachePolicyConverter.cs
- EditorPartChrome.cs
- ThousandthOfEmRealDoubles.cs
- PersonalizablePropertyEntry.cs
- PlatformCulture.cs
- EntityCommand.cs
- ThreadAttributes.cs
- ByteRangeDownloader.cs
- EmptyEnumerator.cs
- RowToFieldTransformer.cs
- Ops.cs
- IUnknownConstantAttribute.cs
- BooleanExpr.cs
- ExpressionPrinter.cs
- X509Certificate2.cs
- DataGridAddNewRow.cs
- ConfigXmlDocument.cs
- SqlException.cs
- TextDataBindingHandler.cs
- EndOfStreamException.cs
- TypeReference.cs
- StoreItemCollection.Loader.cs
- Tuple.cs
- Point4D.cs
- StringBuilder.cs
- XhtmlBasicLiteralTextAdapter.cs
- SQLByteStorage.cs
- Literal.cs
- AsyncStreamReader.cs
- MethodExpr.cs
- ResourceReferenceExpression.cs
- CalendarAutoFormatDialog.cs
- SecurityDocument.cs
- Fx.cs
- ResourceReferenceExpression.cs
- Ref.cs
- TabItemWrapperAutomationPeer.cs
- WebBaseEventKeyComparer.cs
- DataKey.cs
- SqlDataSourceFilteringEventArgs.cs
- PeerNameRegistration.cs
- ConfigXmlAttribute.cs
- BitmapSourceSafeMILHandle.cs
- TransformerTypeCollection.cs
- PeerMessageDispatcher.cs
- RegistrationProxy.cs
- MappingSource.cs
- UdpTransportBindingElement.cs
- ExceptionValidationRule.cs
- PrimitiveOperationFormatter.cs
- WCFServiceClientProxyGenerator.cs
- HMACSHA512.cs
- PtsHelper.cs
- TargetControlTypeCache.cs
- PropertyGridEditorPart.cs
- TransformGroup.cs
- BoundColumn.cs
- EmptyTextWriter.cs
- EntryWrittenEventArgs.cs
- Rfc2898DeriveBytes.cs
- StrokeCollection.cs
- AuthenticationModuleElementCollection.cs
- XmlSchemaGroup.cs
- UIElement3D.cs
- TemplateKeyConverter.cs
- EdmProviderManifest.cs
- TagMapInfo.cs
- EdmSchemaAttribute.cs
- HexParser.cs
- JoinElimination.cs
- PageThemeCodeDomTreeGenerator.cs