X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Drawing%2FSystem.Drawing.Imaging%2FImageAttributes.cs;h=e003745dfbb79106d1d64622a9df43abcc574299;hb=546a1134d2d6d75e2989249f9b0803ec03e71789;hp=be8fb9b1ea75bc5403a08a86911d7a87a052de46;hpb=f405a096007b43ba1d01461e6b8d61dfd3bf92ac;p=mono.git diff --git a/mcs/class/System.Drawing/System.Drawing.Imaging/ImageAttributes.cs b/mcs/class/System.Drawing/System.Drawing.Imaging/ImageAttributes.cs index be8fb9b1ea7..e003745dfbb 100644 --- a/mcs/class/System.Drawing/System.Drawing.Imaging/ImageAttributes.cs +++ b/mcs/class/System.Drawing/System.Drawing.Imaging/ImageAttributes.cs @@ -1,16 +1,14 @@ // // System.Drawing.Imaging.ImageAttributes.cs // -// Author: -// Dennis Hayes (dennish@raytek.com) (stubbed out) -// Jordi Mas i Hernàndez (jmas@softcatala.org) -// Sanjay Gupta (gsanjay@novell.com) +// Authors: +// Dennis Hayes (dennish@raytek.com) (stubbed out) +// Jordi Mas i Hernàndez (jmas@softcatala.org) +// Sanjay Gupta (gsanjay@novell.com) +// Sebastien Pouliot // // (C) 2002-4 Ximian, Inc. http://www.ximian.com -// - -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// Copyright (C) 2004, 2006 Novell, Inc (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -32,16 +30,12 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -using System; -using System.Drawing; using System.Drawing.Drawing2D; using System.Runtime.InteropServices; -namespace System.Drawing.Imaging -{ - /// - /// Summary description for ImageAttributes. - /// +namespace System.Drawing.Imaging { + + [StructLayout(LayoutKind.Sequential)] public sealed class ImageAttributes : ICloneable, IDisposable { private IntPtr nativeImageAttr = IntPtr.Zero; @@ -82,7 +76,7 @@ namespace System.Drawing.Imaging Status status = GDIPlus.GdipSetImageAttributesColorKeys (nativeImageAttr, type, false, 0, 0); - GDIPlus.CheckStatus (status); + GDIPlus.CheckStatus (status); } public void ClearColorMatrix() @@ -90,12 +84,11 @@ namespace System.Drawing.Imaging ClearColorMatrix (ColorAdjustType.Default); } - public void ClearColorMatrix(ColorAdjustType type) + public void ClearColorMatrix (ColorAdjustType type) { - Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, - type, false, null, null, ColorMatrixFlag.Default); - - GDIPlus.CheckStatus (status); + Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, type, false, + IntPtr.Zero, IntPtr.Zero, ColorMatrixFlag.Default); + GDIPlus.CheckStatus (status); } public void ClearGamma() @@ -177,70 +170,66 @@ namespace System.Drawing.Imaging //Sets the color keys for all GDI+ objects public void SetColorKey(Color colorLow, Color colorHigh) { - - Status status = GDIPlus.GdipSetImageAttributesColorKeys(nativeImageAttr, - ColorAdjustType.Default, true, colorLow.ToArgb(), colorHigh.ToArgb()); - - if (status != Status.Ok) - throw new Exception ("Error calling GDIPlus.GdipSetImageAttributesColorKeys:" +status); + SetColorKey (colorLow, colorHigh, ColorAdjustType.Default); } - public void SetColorMatrix(ColorMatrix colorMatrix) + public void SetColorMatrix (ColorMatrix colorMatrix) { - - Status status = GDIPlus.GdipSetImageAttributesColorMatrix(nativeImageAttr, ColorAdjustType.Default, - true, colorMatrix, (ColorMatrix)null, ColorMatrixFlag.Default); - - if (status != Status.Ok) - throw new Exception ("Error calling GDIPlus.SetColorMatrix:" +status); + IntPtr cm = ColorMatrix.Alloc (colorMatrix); + try { + Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, + ColorAdjustType.Default, true, cm, IntPtr.Zero, ColorMatrixFlag.Default); + GDIPlus.CheckStatus (status); + } + finally { + ColorMatrix.Free (cm); + } } - public void SetColorMatrix(ColorMatrix colorMatrix, ColorMatrixFlag colorMatrixFlag) - { - - Status status = GDIPlus.GdipSetImageAttributesColorMatrix(nativeImageAttr, ColorAdjustType.Default, - true, colorMatrix, (ColorMatrix)null, colorMatrixFlag); - if (status != Status.Ok) - throw new Exception ("Error calling GDIPlus.SetColorMatrix:" +status); - + [MonoTODO ("colorMatrixFlag is ignored in libgdiplus")] + public void SetColorMatrix (ColorMatrix colorMatrix, ColorMatrixFlag colorMatrixFlag) + { + IntPtr cm = ColorMatrix.Alloc (colorMatrix); + try { + Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, + ColorAdjustType.Default, true, cm, IntPtr.Zero, colorMatrixFlag); + GDIPlus.CheckStatus (status); + } + finally { + ColorMatrix.Free (cm); + } } - public void SetColorMatrix(ColorMatrix colorMatrix, ColorMatrixFlag colorMatrixFlag, ColorAdjustType colorAdjustType) { - - Status status = GDIPlus.GdipSetImageAttributesColorMatrix(nativeImageAttr,colorAdjustType, - true, colorMatrix, (ColorMatrix)null, colorMatrixFlag); - - if (status != Status.Ok) - throw new Exception ("Error calling GDIPlus.SetColorMatrix:" +status); + [MonoTODO ("colorMatrixFlag is ignored in libgdiplus")] + public void SetColorMatrix (ColorMatrix colorMatrix, ColorMatrixFlag colorMatrixFlag, ColorAdjustType colorAdjustType) + { + IntPtr cm = ColorMatrix.Alloc (colorMatrix); + try { + Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, + colorAdjustType, true, cm, IntPtr.Zero, colorMatrixFlag); + GDIPlus.CheckStatus (status); + } + finally { + ColorMatrix.Free (cm); + } } - void Dispose (bool disposing) - { - if (!disposing) return; - - Status status = GDIPlus.GdipDisposeImageAttributes(nativeImageAttr); - - if (status != Status.Ok) - throw new Exception ("Error calling GDIPlus.GdipDisposeImageAttributes:" +status); - else - nativeImageAttr = IntPtr.Zero; - } - - public void Dispose() { + if (nativeImageAttr != IntPtr.Zero) { + + Status status = GDIPlus.GdipDisposeImageAttributes(nativeImageAttr); + GDIPlus.CheckStatus (status); + nativeImageAttr = IntPtr.Zero; + } - Dispose (true); System.GC.SuppressFinalize (this); } ~ImageAttributes() - { - - Dispose (false); - } - - + { + Dispose (); + } public object Clone() { @@ -270,22 +259,22 @@ namespace System.Drawing.Imaging int mapsize = Marshal.SizeOf (gdiclr); int size = mapsize * map.Length; clrmap = lpPointer = Marshal.AllocHGlobal (size); - - for (int i=0; i < map.Length; i++) - { - gdiclr.from = map[i].OldColor.ToArgb(); - gdiclr.to = map[i].NewColor.ToArgb(); + try { + for (int i=0; i < map.Length; i++) { + gdiclr.from = map[i].OldColor.ToArgb(); + gdiclr.to = map[i].NewColor.ToArgb(); - Marshal.StructureToPtr (gdiclr, lpPointer, false); - lpPointer = (IntPtr) (lpPointer.ToInt32() + mapsize); - } + Marshal.StructureToPtr (gdiclr, lpPointer, false); + lpPointer = (IntPtr) (lpPointer.ToInt64() + mapsize); + } - Status status = GDIPlus.GdipSetImageAttributesRemapTable (nativeImageAttr, - ColorAdjustType.Brush, true, (uint) map.Length, clrmap); - - Marshal.FreeHGlobal (clrmap); - - GDIPlus.CheckStatus (status); + Status status = GDIPlus.GdipSetImageAttributesRemapTable (nativeImageAttr, + ColorAdjustType.Brush, true, (uint) map.Length, clrmap); + GDIPlus.CheckStatus (status); + } + finally { + Marshal.FreeHGlobal (clrmap); + } } @@ -298,28 +287,64 @@ namespace System.Drawing.Imaging } - public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix grayMatrix) + [MonoTODO ("grayMatrix is ignored in libgdiplus")] + public void SetColorMatrices (ColorMatrix newColorMatrix, ColorMatrix grayMatrix) { - Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, - ColorAdjustType.Default, true, newColorMatrix, grayMatrix, ColorMatrixFlag.Default); - - GDIPlus.CheckStatus (status); + IntPtr cm = ColorMatrix.Alloc (newColorMatrix); + try { + IntPtr gm = ColorMatrix.Alloc (grayMatrix); + try { + Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, + ColorAdjustType.Default, true, cm, gm, ColorMatrixFlag.Default); + GDIPlus.CheckStatus (status); + } + finally { + ColorMatrix.Free (gm); + } + } + finally { + ColorMatrix.Free (cm); + } } - public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix grayMatrix, ColorMatrixFlag flags) - { - Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, - ColorAdjustType.Default, true, newColorMatrix, grayMatrix, flags); - - GDIPlus.CheckStatus (status); - } + [MonoTODO ("grayMatrix and colorMatrixFlag are ignored in libgdiplus")] + public void SetColorMatrices (ColorMatrix newColorMatrix, ColorMatrix grayMatrix, ColorMatrixFlag flags) + { + IntPtr cm = ColorMatrix.Alloc (newColorMatrix); + try { + IntPtr gm = ColorMatrix.Alloc (grayMatrix); + try { + Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, + ColorAdjustType.Default, true, cm, gm, flags); + GDIPlus.CheckStatus (status); + } + finally { + ColorMatrix.Free (gm); + } + } + finally { + ColorMatrix.Free (cm); + } + } - public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix grayMatrix, ColorMatrixFlag mode, ColorAdjustType type) - { - Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, - ColorAdjustType.Default, true, newColorMatrix, grayMatrix, mode); - - GDIPlus.CheckStatus (status); + [MonoTODO ("grayMatrix and colorMatrixFlag are ignored in libgdiplus")] + public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix grayMatrix, ColorMatrixFlag mode, ColorAdjustType type) + { + IntPtr cm = ColorMatrix.Alloc (newColorMatrix); + try { + IntPtr gm = ColorMatrix.Alloc (grayMatrix); + try { + Status status = GDIPlus.GdipSetImageAttributesColorMatrix (nativeImageAttr, + ColorAdjustType.Default, true, cm, gm, mode); + GDIPlus.CheckStatus (status); + } + finally { + ColorMatrix.Free (gm); + } + } + finally { + ColorMatrix.Free (cm); + } } public void SetGamma(float gamma) @@ -387,23 +412,22 @@ namespace System.Drawing.Imaging int mapsize = Marshal.SizeOf (gdiclr); int size = mapsize * map.Length; clrmap = lpPointer = Marshal.AllocHGlobal (size); - - for (int i=0; i < map.Length; i++) - { - gdiclr.from = map[i].OldColor.ToArgb(); - gdiclr.to = map[i].NewColor.ToArgb(); - - Marshal.StructureToPtr (gdiclr, lpPointer, false); - lpPointer = (IntPtr) (lpPointer.ToInt32() + mapsize); - } - - Status status = GDIPlus.GdipSetImageAttributesRemapTable (nativeImageAttr, - type, true, (uint) map.Length, clrmap); + try { + for (int i=0; i < map.Length; i++) { + gdiclr.from = map[i].OldColor.ToArgb(); + gdiclr.to = map[i].NewColor.ToArgb(); - Marshal.FreeHGlobal (clrmap); - - GDIPlus.CheckStatus (status); + Marshal.StructureToPtr (gdiclr, lpPointer, false); + lpPointer = (IntPtr) (lpPointer.ToInt64() + mapsize); + } + Status status = GDIPlus.GdipSetImageAttributesRemapTable (nativeImageAttr, + type, true, (uint) map.Length, clrmap); + GDIPlus.CheckStatus (status); + } + finally { + Marshal.FreeHGlobal (clrmap); + } } public void SetThreshold(float threshold) @@ -438,6 +462,5 @@ namespace System.Drawing.Imaging GDIPlus.CheckStatus (status); } - } }