Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / CommonUI / System / Drawing / Advanced / EncoderParameters.cs / 1 / EncoderParameters.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Drawing.Imaging {
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System;
using System.Drawing.Internal;
using Marshal = System.Runtime.InteropServices.Marshal;
using System.Drawing;
//[StructLayout(LayoutKind.Sequential)]
///
///
/// [To be supplied.]
///
public sealed class EncoderParameters : IDisposable {
EncoderParameter[] param;
///
///
/// [To be supplied.]
///
public EncoderParameters(int count) {
param = new EncoderParameter[count];
}
///
///
/// [To be supplied.]
///
public EncoderParameters() {
param = new EncoderParameter[1];
}
///
///
/// [To be supplied.]
///
public EncoderParameter[] Param {
//
get {
return param;
}
set {
param = value;
}
}
///
/// Copy the EncoderParameters data into a chunk of memory to be consumed by native GDI+ code.
///
/// We need to marshal the EncoderParameters info from/to native GDI+ ourselve since the definition of the managed/unmanaged classes
/// are different and the native class is a bit weird. The native EncoderParameters class is defined in GDI+ as follows:
///
/// class EncoderParameters {
/// UINT Count; // Number of parameters in this structure
/// EncoderParameter Parameter[1]; // Parameter values
/// };
///
/// We don't have the 'Count' field since the managed array contains it. In order for this structure to work with more than one
/// EncoderParameter we need to preallocate memory for the extra n-1 elements, something like this:
///
/// EncoderParameters* pEncoderParameters = (EncoderParameters*) malloc(sizeof(EncoderParameters) + (n-1) * sizeof(EncoderParameter));
///
/// Also, in 64-bit platforms, 'Count' is aligned in 8 bytes (4 extra padding bytes) so we use IntPtr instead of Int32 to account for
/// that (See VSW#451333).
///
internal IntPtr ConvertToMemory() {
int size = Marshal.SizeOf(typeof(EncoderParameter));
IntPtr memory = Marshal.AllocHGlobal(param.Length * size + Marshal.SizeOf(typeof(IntPtr)));
if (memory == IntPtr.Zero){
throw SafeNativeMethods.Gdip.StatusException(SafeNativeMethods.Gdip.OutOfMemory);
}
Marshal.WriteIntPtr(memory, (IntPtr) param.Length);
long arrayOffset = (long) memory + Marshal.SizeOf(typeof(IntPtr));
for (int i=0; i
/// Copy the native GDI+ EncoderParameters data from a chunk of memory into a managed EncoderParameters object.
/// See ConvertToMemory for more info.
///
[SuppressMessage("Microsoft.Performance", "CA1808:AvoidCallsThatBoxValueTypes")]
internal static EncoderParameters ConvertFromMemory(IntPtr memory) {
if (memory == IntPtr.Zero) {
throw SafeNativeMethods.Gdip.StatusException(SafeNativeMethods.Gdip.InvalidParameter);
}
int count = Marshal.ReadIntPtr(memory).ToInt32();
EncoderParameters p = new EncoderParameters(count);
int size = Marshal.SizeOf(typeof(EncoderParameter));
long arrayOffset = (long)memory + Marshal.SizeOf(typeof(IntPtr));
for (int i=0; i
public void Dispose() {
foreach (EncoderParameter p in param) {
if( p != null ){
p.Dispose();
}
}
param = null;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Drawing.Imaging {
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System;
using System.Drawing.Internal;
using Marshal = System.Runtime.InteropServices.Marshal;
using System.Drawing;
//[StructLayout(LayoutKind.Sequential)]
///
///
/// [To be supplied.]
///
public sealed class EncoderParameters : IDisposable {
EncoderParameter[] param;
///
///
/// [To be supplied.]
///
public EncoderParameters(int count) {
param = new EncoderParameter[count];
}
///
///
/// [To be supplied.]
///
public EncoderParameters() {
param = new EncoderParameter[1];
}
///
///
/// [To be supplied.]
///
public EncoderParameter[] Param {
//
get {
return param;
}
set {
param = value;
}
}
///
/// Copy the EncoderParameters data into a chunk of memory to be consumed by native GDI+ code.
///
/// We need to marshal the EncoderParameters info from/to native GDI+ ourselve since the definition of the managed/unmanaged classes
/// are different and the native class is a bit weird. The native EncoderParameters class is defined in GDI+ as follows:
///
/// class EncoderParameters {
/// UINT Count; // Number of parameters in this structure
/// EncoderParameter Parameter[1]; // Parameter values
/// };
///
/// We don't have the 'Count' field since the managed array contains it. In order for this structure to work with more than one
/// EncoderParameter we need to preallocate memory for the extra n-1 elements, something like this:
///
/// EncoderParameters* pEncoderParameters = (EncoderParameters*) malloc(sizeof(EncoderParameters) + (n-1) * sizeof(EncoderParameter));
///
/// Also, in 64-bit platforms, 'Count' is aligned in 8 bytes (4 extra padding bytes) so we use IntPtr instead of Int32 to account for
/// that (See VSW#451333).
///
internal IntPtr ConvertToMemory() {
int size = Marshal.SizeOf(typeof(EncoderParameter));
IntPtr memory = Marshal.AllocHGlobal(param.Length * size + Marshal.SizeOf(typeof(IntPtr)));
if (memory == IntPtr.Zero){
throw SafeNativeMethods.Gdip.StatusException(SafeNativeMethods.Gdip.OutOfMemory);
}
Marshal.WriteIntPtr(memory, (IntPtr) param.Length);
long arrayOffset = (long) memory + Marshal.SizeOf(typeof(IntPtr));
for (int i=0; i
/// Copy the native GDI+ EncoderParameters data from a chunk of memory into a managed EncoderParameters object.
/// See ConvertToMemory for more info.
///
[SuppressMessage("Microsoft.Performance", "CA1808:AvoidCallsThatBoxValueTypes")]
internal static EncoderParameters ConvertFromMemory(IntPtr memory) {
if (memory == IntPtr.Zero) {
throw SafeNativeMethods.Gdip.StatusException(SafeNativeMethods.Gdip.InvalidParameter);
}
int count = Marshal.ReadIntPtr(memory).ToInt32();
EncoderParameters p = new EncoderParameters(count);
int size = Marshal.SizeOf(typeof(EncoderParameter));
long arrayOffset = (long)memory + Marshal.SizeOf(typeof(IntPtr));
for (int i=0; i
public void Dispose() {
foreach (EncoderParameter p in param) {
if( p != null ){
p.Dispose();
}
}
param = null;
}
}
}
// 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
- UTF8Encoding.cs
- LineProperties.cs
- XamlHostingSectionGroup.cs
- GridView.cs
- EntityExpressionVisitor.cs
- SendingRequestEventArgs.cs
- TypeConverterValueSerializer.cs
- ValidationEventArgs.cs
- MailAddressParser.cs
- DbMetaDataFactory.cs
- CacheModeConverter.cs
- TypeHelpers.cs
- XmlValidatingReader.cs
- CancelEventArgs.cs
- SafePipeHandle.cs
- PreservationFileReader.cs
- InkPresenterAutomationPeer.cs
- MouseBinding.cs
- ListItemConverter.cs
- SyndicationItem.cs
- CodeNamespaceImportCollection.cs
- PropagationProtocolsTracing.cs
- SpeechRecognizer.cs
- XmlSerializerFactory.cs
- DbProviderManifest.cs
- MutexSecurity.cs
- ModuleBuilder.cs
- SByteConverter.cs
- BaseValidator.cs
- TrustManagerPromptUI.cs
- ProvidersHelper.cs
- BufferAllocator.cs
- TemplateModeChangedEventArgs.cs
- Pkcs7Recipient.cs
- DataGridViewSortCompareEventArgs.cs
- OrderedDictionaryStateHelper.cs
- Relationship.cs
- ObjectStorage.cs
- __FastResourceComparer.cs
- RtfToXamlReader.cs
- _ListenerResponseStream.cs
- KeyedQueue.cs
- ProviderBase.cs
- TextDecoration.cs
- PackWebResponse.cs
- KeyValueInternalCollection.cs
- AsyncOperationManager.cs
- UpdateCompiler.cs
- PasswordTextNavigator.cs
- ControlValuePropertyAttribute.cs
- VSWCFServiceContractGenerator.cs
- SqlDeflator.cs
- Simplifier.cs
- LayoutEvent.cs
- SelectionHighlightInfo.cs
- TileBrush.cs
- XmlSchemaType.cs
- ImageMetadata.cs
- securitymgrsite.cs
- DesignTimeValidationFeature.cs
- DispatcherHookEventArgs.cs
- ToolboxComponentsCreatedEventArgs.cs
- XPathSingletonIterator.cs
- ObjectStateEntryDbDataRecord.cs
- PartitionedStream.cs
- IUnknownConstantAttribute.cs
- URLString.cs
- EncoderExceptionFallback.cs
- ExpressionBindings.cs
- ClientRolePrincipal.cs
- DBSqlParser.cs
- WebPartZoneBaseDesigner.cs
- WeakReferenceEnumerator.cs
- BitConverter.cs
- CallbackWrapper.cs
- XmlMapping.cs
- GridViewRowCollection.cs
- TraceSource.cs
- OperationPickerDialog.designer.cs
- QilUnary.cs
- SingleKeyFrameCollection.cs
- DataGridViewDataConnection.cs
- XMLDiffLoader.cs
- CharAnimationUsingKeyFrames.cs
- CaseInsensitiveOrdinalStringComparer.cs
- DuplicateWaitObjectException.cs
- TemplateColumn.cs
- CompilationLock.cs
- HttpFileCollectionBase.cs
- TypeConverterValueSerializer.cs
- DesignerForm.cs
- StrokeCollectionDefaultValueFactory.cs
- SafeThreadHandle.cs
- ServiceOperationUIEditor.cs
- FuncTypeConverter.cs
- UserNameSecurityTokenProvider.cs
- IDReferencePropertyAttribute.cs
- SessionEndedEventArgs.cs
- SqlDataReaderSmi.cs
- TdsRecordBufferSetter.cs