Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- BuildResult.cs
- DataGridViewCellValidatingEventArgs.cs
- RouteUrlExpressionBuilder.cs
- DataGridViewMethods.cs
- Listbox.cs
- WhitespaceSignificantCollectionAttribute.cs
- AllowedAudienceUriElementCollection.cs
- altserialization.cs
- PatternMatcher.cs
- ParameterCollection.cs
- CounterCreationDataCollection.cs
- ToolStripPanelRow.cs
- WSSecurityPolicy12.cs
- CryptoApi.cs
- ConcatQueryOperator.cs
- DynamicActivityXamlReader.cs
- FtpCachePolicyElement.cs
- WebPartManager.cs
- QueueProcessor.cs
- KnownIds.cs
- AppSettingsSection.cs
- TabItemAutomationPeer.cs
- ToolTipAutomationPeer.cs
- ButtonFlatAdapter.cs
- RectangleConverter.cs
- UIAgentAsyncEndRequest.cs
- SamlAssertionKeyIdentifierClause.cs
- HttpCacheVaryByContentEncodings.cs
- ProtocolImporter.cs
- sortedlist.cs
- CallbackValidator.cs
- Splitter.cs
- DataSourceControlBuilder.cs
- DependencyObjectType.cs
- PropertyGrid.cs
- MinimizableAttributeTypeConverter.cs
- MDIClient.cs
- WindowsIdentity.cs
- RelationshipConverter.cs
- EdmScalarPropertyAttribute.cs
- AutomationElementIdentifiers.cs
- WhiteSpaceTrimStringConverter.cs
- DetailsViewDeletedEventArgs.cs
- XmlIncludeAttribute.cs
- MethodExpr.cs
- SchemaSetCompiler.cs
- FileUpload.cs
- messageonlyhwndwrapper.cs
- precedingsibling.cs
- JavaScriptString.cs
- HtmlElement.cs
- SqlClientWrapperSmiStream.cs
- ReadOnlyObservableCollection.cs
- OdbcFactory.cs
- BitmapScalingModeValidation.cs
- BuildManagerHost.cs
- WpfPayload.cs
- KeyEventArgs.cs
- ControlTemplate.cs
- TransformerInfo.cs
- smtppermission.cs
- JsonMessageEncoderFactory.cs
- ThousandthOfEmRealPoints.cs
- DockAndAnchorLayout.cs
- RawUIStateInputReport.cs
- PersonalizationStateQuery.cs
- XNodeNavigator.cs
- WindowsScrollBar.cs
- PropertyPath.cs
- HttpStreams.cs
- BrowserTree.cs
- FontDifferentiator.cs
- InvalidOleVariantTypeException.cs
- NullableConverter.cs
- StateBag.cs
- PersonalizationStateQuery.cs
- tooltip.cs
- ServerIdentity.cs
- Item.cs
- SoapRpcServiceAttribute.cs
- MessageEncodingBindingElement.cs
- WebPartTransformerAttribute.cs
- LocationEnvironment.cs
- ConnectionString.cs
- SchemaNames.cs
- ToolStripItemImageRenderEventArgs.cs
- Pen.cs
- SoapIncludeAttribute.cs
- ToolStripContainerActionList.cs
- EpmSourceTree.cs
- RadioButton.cs
- QueryPageSettingsEventArgs.cs
- SqlVisitor.cs
- UnicastIPAddressInformationCollection.cs
- OdbcConnectionOpen.cs
- WindowsFormsSynchronizationContext.cs
- SerializerDescriptor.cs
- EdmScalarPropertyAttribute.cs
- precedingsibling.cs
- NotifyCollectionChangedEventArgs.cs