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
- XmlSchemaInfo.cs
- Persist.cs
- PointLightBase.cs
- StickyNote.cs
- ClientTarget.cs
- CharKeyFrameCollection.cs
- SqlDependency.cs
- SqlDataSource.cs
- TextDocumentView.cs
- FixedSOMSemanticBox.cs
- BufferedOutputStream.cs
- PointKeyFrameCollection.cs
- MetafileHeaderWmf.cs
- Parallel.cs
- IteratorFilter.cs
- GradientStop.cs
- CompositeControl.cs
- ListBoxItemWrapperAutomationPeer.cs
- isolationinterop.cs
- MissingFieldException.cs
- TypeSystemHelpers.cs
- OpenTypeMethods.cs
- XPathItem.cs
- FormsAuthenticationCredentials.cs
- MatchingStyle.cs
- DataGridColumnCollection.cs
- Timeline.cs
- XmlDocumentSerializer.cs
- ObjectDataSourceView.cs
- ProcessMonitor.cs
- Matrix.cs
- DynamicPropertyHolder.cs
- TemplateAction.cs
- SystemKeyConverter.cs
- HttpWriter.cs
- SafeSecurityHandles.cs
- FragmentNavigationEventArgs.cs
- WaitHandle.cs
- AuthenticodeSignatureInformation.cs
- WebServiceErrorEvent.cs
- InfiniteIntConverter.cs
- WindowsSpinner.cs
- CodeTypeReferenceExpression.cs
- ServiceHttpModule.cs
- Wizard.cs
- CodeDomSerializer.cs
- ManagementClass.cs
- XamlReader.cs
- Substitution.cs
- CodeAttributeDeclarationCollection.cs
- TaskFormBase.cs
- AsyncOperationManager.cs
- ImportedNamespaceContextItem.cs
- SHA1.cs
- DependencyPropertyConverter.cs
- FileChangeNotifier.cs
- PolyBezierSegment.cs
- BamlBinaryReader.cs
- FaultContractInfo.cs
- ConfigurationPropertyAttribute.cs
- ParagraphResult.cs
- SolidBrush.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- CroppedBitmap.cs
- ContextTokenTypeConverter.cs
- CustomTypeDescriptor.cs
- ErrorEventArgs.cs
- NameValueConfigurationCollection.cs
- ErrorsHelper.cs
- AttributeSetAction.cs
- QilInvokeLateBound.cs
- EntityTemplateFactory.cs
- IdentityManager.cs
- TypeConverterValueSerializer.cs
- CompoundFileStorageReference.cs
- LassoHelper.cs
- WorkflowServiceHost.cs
- DataGridViewRowPostPaintEventArgs.cs
- SessionStateSection.cs
- TypeBuilder.cs
- AuthenticationSection.cs
- CodeExporter.cs
- XmlDeclaration.cs
- XmlSchemaImporter.cs
- Pts.cs
- Queue.cs
- MatchAllMessageFilter.cs
- StrongNameHelpers.cs
- Mutex.cs
- UndoManager.cs
- RedistVersionInfo.cs
- SerializerDescriptor.cs
- PrintDialogException.cs
- LinearKeyFrames.cs
- DynamicControlParameter.cs
- basenumberconverter.cs
- MSAAEventDispatcher.cs
- TempEnvironment.cs
- AstTree.cs
- ImageFormatConverter.cs