2 // System.Drawing.gdipFunctions.cs
5 // Alexandre Pigolkine (pigolkine@gmx.de)
6 // Jordi Mas i Hernandez (jordi@ximian.com)
7 // Sanjay Gupta (gsanjay@novell.com)
8 // Ravindra (rkumar@novell.com)
9 // Peter Dennis Bartok (pbartok@novell.com)
10 // Sebastien Pouliot <sebastien@ximian.com>
12 // Copyright (C) 2004 - 2007 Novell, Inc (http://www.novell.com)
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System.Runtime.InteropServices;
37 using System.Drawing.Drawing2D;
38 using System.Drawing.Imaging;
39 using System.Drawing.Text;
40 using System.Globalization;
41 using System.Security;
42 using System.Runtime.InteropServices.ComTypes;
44 namespace System.Drawing
47 /// GDI+ API Functions
49 internal static class GDIPlus {
50 public const int FACESIZE = 32;
51 public const int LANG_NEUTRAL = 0;
52 public static IntPtr Display = IntPtr.Zero;
53 public static bool UseX11Drawable = false;
54 public static bool UseCarbonDrawable = false;
55 public static bool UseCocoaDrawable = false;
57 private const string GdiPlus = "gdiplus";
59 #region gdiplus.dll functions
63 static internal extern Status GdiplusStartup(ref ulong token, ref GdiplusStartupInput input, ref GdiplusStartupOutput output);
65 static internal extern void GdiplusShutdown(ref ulong token);
67 internal static ulong GdiPlusToken = 0;
69 static void ProcessExit (object sender, EventArgs e)
71 // Called all pending objects and claim any pending handle before
74 GC.WaitForPendingFinalizers ();
78 // This causes crashes in because this call occurs before all
79 // managed GDI+ objects are finalized. When they are finalized
80 // they call into a shutdown GDI+ and we crash.
81 GdiplusShutdown (ref GdiPlusToken);
83 // This causes crashes in Mono libgdiplus because this call
84 // occurs before all managed GDI objects are finalized
85 // When they are finalized they use the closed display and
87 if (UseX11Drawable && Display != IntPtr.Zero) {
88 XCloseDisplay (Display);
95 int platform = (int) Environment.OSVersion.Platform;
96 if ((platform == 4) || (platform == 6) || (platform == 128)) {
97 if (Environment.GetEnvironmentVariable ("not_supported_MONO_MWF_USE_NEW_X11_BACKEND") != null || Environment.GetEnvironmentVariable ("MONO_MWF_MAC_FORCE_X11") != null) {
98 UseX11Drawable = true;
100 IntPtr buf = Marshal.AllocHGlobal (8192);
101 // This is kind of a hack but gets us sysname from uname (struct utsname *name) on
103 if (uname (buf) != 0) {
104 // WTH: We couldn't detect the OS; lets default to X11
105 UseX11Drawable = true;
107 string os = Marshal.PtrToStringAnsi (buf);
109 UseCarbonDrawable = true;
111 UseX11Drawable = true;
113 Marshal.FreeHGlobal (buf);
117 GdiplusStartupInput input = GdiplusStartupInput.MakeGdiplusStartupInput();
118 GdiplusStartupOutput output = GdiplusStartupOutput.MakeGdiplusStartupOutput();
120 GdiplusStartup (ref GdiPlusToken, ref input, ref output);
122 catch (TypeInitializationException) {
123 Console.Error.WriteLine (
124 "* ERROR: Can not initialize GDI+ library{0}{0}" +
125 "Please check http://www.mono-project.com/Problem:GDIPlusInit for details",
126 Environment.NewLine);
129 // under MS 1.x this event is raised only for the default application domain
130 AppDomain.CurrentDomain.ProcessExit += new EventHandler (ProcessExit);
133 static public bool RunningOnWindows ()
135 return !UseX11Drawable && !UseCarbonDrawable && !UseCocoaDrawable;
138 static public bool RunningOnUnix ()
140 return UseX11Drawable || UseCarbonDrawable || UseCocoaDrawable;
143 // Copies a Ptr to an array of Points and releases the memory
144 static public void FromUnManagedMemoryToPointI (IntPtr prt, Point [] pts)
146 int nPointSize = Marshal.SizeOf (pts[0]);
148 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
149 pts[i] = (Point) Marshal.PtrToStructure (pos, typeof (Point));
151 Marshal.FreeHGlobal (prt);
154 // Copies a Ptr to an array of Points and releases the memory
155 static public void FromUnManagedMemoryToPoint (IntPtr prt, PointF [] pts)
157 int nPointSize = Marshal.SizeOf (pts[0]);
159 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
160 pts[i] = (PointF) Marshal.PtrToStructure (pos, typeof (PointF));
162 Marshal.FreeHGlobal (prt);
165 // Copies an array of Points to unmanaged memory
166 static public IntPtr FromPointToUnManagedMemoryI (Point [] pts)
168 int nPointSize = Marshal.SizeOf (pts[0]);
169 IntPtr dest = Marshal.AllocHGlobal (nPointSize * pts.Length);
171 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
172 Marshal.StructureToPtr (pts[i], pos, false);
177 // Copies a Ptr to an array of v and releases the memory
178 static public void FromUnManagedMemoryToRectangles (IntPtr prt, RectangleF [] pts)
180 int nPointSize = Marshal.SizeOf (pts[0]);
182 for (int i = 0; i < pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
183 pts[i] = (RectangleF) Marshal.PtrToStructure (pos, typeof (RectangleF));
185 Marshal.FreeHGlobal (prt);
188 // Copies an array of Points to unmanaged memory
189 static public IntPtr FromPointToUnManagedMemory (PointF [] pts)
191 int nPointSize = Marshal.SizeOf (pts[0]);
192 IntPtr dest = Marshal.AllocHGlobal (nPointSize * pts.Length);
194 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
195 Marshal.StructureToPtr (pts[i], pos, false);
200 // Converts a status into exception
201 // TODO: Add more status code mappings here
202 static internal void CheckStatus (Status status)
208 case Status.GenericError:
209 msg = Locale.GetText ("Generic Error [GDI+ status: {0}]", status);
210 throw new Exception (msg);
211 case Status.InvalidParameter:
212 msg = Locale.GetText ("A null reference or invalid value was found [GDI+ status: {0}]", status);
213 throw new ArgumentException (msg);
214 case Status.OutOfMemory:
215 msg = Locale.GetText ("Not enough memory to complete operation [GDI+ status: {0}]", status);
216 throw new OutOfMemoryException (msg);
217 case Status.ObjectBusy:
218 msg = Locale.GetText ("Object is busy and cannot state allow this operation [GDI+ status: {0}]", status);
219 throw new MemberAccessException (msg);
220 case Status.InsufficientBuffer:
221 msg = Locale.GetText ("Insufficient buffer provided to complete operation [GDI+ status: {0}]", status);
222 throw new InternalBufferOverflowException (msg);
223 case Status.PropertyNotSupported:
224 msg = Locale.GetText ("Property not supported [GDI+ status: {0}]", status);
225 throw new NotSupportedException (msg);
226 case Status.FileNotFound:
227 msg = Locale.GetText ("Requested file was not found [GDI+ status: {0}]", status);
228 throw new FileNotFoundException (msg);
229 case Status.AccessDenied:
230 msg = Locale.GetText ("Access to resource was denied [GDI+ status: {0}]", status);
231 throw new UnauthorizedAccessException (msg);
232 case Status.UnknownImageFormat:
233 msg = Locale.GetText ("Either the image format is unknown or you don't have the required libraries to decode this format [GDI+ status: {0}]", status);
234 throw new NotSupportedException (msg);
235 case Status.NotImplemented:
236 msg = Locale.GetText ("The requested feature is not implemented [GDI+ status: {0}]", status);
237 throw new NotImplementedException (msg);
238 case Status.WrongState:
239 msg = Locale.GetText ("Object is not in a state that can allow this operation [GDI+ status: {0}]", status);
240 throw new ArgumentException (msg);
241 case Status.FontFamilyNotFound:
242 msg = Locale.GetText ("The requested FontFamily could not be found [GDI+ status: {0}]", status);
243 throw new ArgumentException (msg);
244 case Status.ValueOverflow:
245 msg = Locale.GetText ("Argument is out of range [GDI+ status: {0}]", status);
246 throw new OverflowException (msg);
247 case Status.Win32Error:
248 msg = Locale.GetText ("The operation is invalid [GDI+ status: {0}]", status);
249 throw new InvalidOperationException (msg);
251 msg = Locale.GetText ("Unknown Error [GDI+ status: {0}]", status);
252 throw new Exception (msg);
258 static internal extern IntPtr GdipAlloc (int size);
260 static internal extern void GdipFree (IntPtr ptr);
265 static internal extern Status GdipCloneBrush (IntPtr brush, out IntPtr clonedBrush);
267 static internal extern Status GdipDeleteBrush (IntPtr brush);
269 static internal extern Status GdipGetBrushType (IntPtr brush, out BrushType type);
274 static internal extern Status GdipCreateRegion (out IntPtr region);
277 static internal extern Status GdipCreateRegionRgnData (byte[] data, int size, out IntPtr region);
280 static internal extern Status GdipDeleteRegion (IntPtr region);
283 static internal extern Status GdipCloneRegion (IntPtr region, out IntPtr cloned);
286 static internal extern Status GdipCreateRegionRect (ref RectangleF rect, out IntPtr region);
289 static internal extern Status GdipCreateRegionRectI (ref Rectangle rect, out IntPtr region);
292 static internal extern Status GdipCreateRegionPath (IntPtr path, out IntPtr region);
295 static internal extern Status GdipTranslateRegion (IntPtr region, float dx, float dy);
298 static internal extern Status GdipTranslateRegionI (IntPtr region, int dx, int dy);
301 static internal extern Status GdipIsVisibleRegionPoint (IntPtr region, float x, float y,
302 IntPtr graphics, out bool result);
305 static internal extern Status GdipIsVisibleRegionPointI (IntPtr region, int x, int y,
306 IntPtr graphics, out bool result);
309 static internal extern Status GdipIsVisibleRegionRect (IntPtr region, float x, float y, float width,
310 float height, IntPtr graphics, out bool result);
313 static internal extern Status GdipIsVisibleRegionRectI (IntPtr region, int x, int y, int width,
314 int height, IntPtr graphics, out bool result);
318 static internal extern Status GdipCombineRegionRect (IntPtr region, ref RectangleF rect,
319 CombineMode combineMode);
322 static internal extern Status GdipCombineRegionRectI (IntPtr region, ref Rectangle rect,
323 CombineMode combineMode);
326 static internal extern Status GdipCombineRegionPath (IntPtr region, IntPtr path, CombineMode combineMode);
329 static internal extern Status GdipGetRegionBounds (IntPtr region, IntPtr graphics, ref RectangleF rect);
332 static internal extern Status GdipSetInfinite (IntPtr region);
335 static internal extern Status GdipSetEmpty (IntPtr region);
338 static internal extern Status GdipIsEmptyRegion (IntPtr region, IntPtr graphics, out bool result);
341 static internal extern Status GdipIsInfiniteRegion (IntPtr region, IntPtr graphics, out bool result);
344 static internal extern Status GdipCombineRegionRegion (IntPtr region, IntPtr region2,
345 CombineMode combineMode);
348 static internal extern Status GdipIsEqualRegion (IntPtr region, IntPtr region2,
349 IntPtr graphics, out bool result);
352 static internal extern Status GdipGetRegionDataSize (IntPtr region, out int bufferSize);
355 static internal extern Status GdipGetRegionData (IntPtr region, byte[] buffer, int bufferSize,
359 static internal extern Status GdipGetRegionScansCount (IntPtr region, out int count, IntPtr matrix);
362 static internal extern Status GdipGetRegionScans (IntPtr region, IntPtr rects, out int count,
366 static internal extern Status GdipTransformRegion(IntPtr region, IntPtr matrix);
369 static internal extern Status GdipFillRegion(IntPtr graphics, IntPtr brush, IntPtr region);
372 static internal extern Status GdipGetRegionHRgn (IntPtr region, IntPtr graphics, ref IntPtr hRgn);
375 static internal extern Status GdipCreateRegionHrgn (IntPtr hRgn, out IntPtr region);
377 // Solid brush functions
379 static internal extern Status GdipCreateSolidFill (int color, out IntPtr brush);
381 static internal extern Status GdipGetSolidFillColor (IntPtr brush, out int color);
383 static internal extern Status GdipSetSolidFillColor (IntPtr brush, int color);
385 // Hatch Brush functions
387 static internal extern Status GdipCreateHatchBrush (HatchStyle hatchstyle, int foreColor, int backColor, out IntPtr brush);
389 static internal extern Status GdipGetHatchStyle (IntPtr brush, out HatchStyle hatchstyle);
391 static internal extern Status GdipGetHatchForegroundColor (IntPtr brush, out int foreColor);
393 static internal extern Status GdipGetHatchBackgroundColor (IntPtr brush, out int backColor);
395 // Texture brush functions
397 static internal extern Status GdipGetTextureImage (IntPtr texture, out IntPtr image);
399 static internal extern Status GdipCreateTexture (IntPtr image, WrapMode wrapMode, out IntPtr texture);
401 static internal extern Status GdipCreateTextureIAI (IntPtr image, IntPtr imageAttributes, int x, int y, int width, int height, out IntPtr texture);
403 static internal extern Status GdipCreateTextureIA (IntPtr image, IntPtr imageAttributes, float x, float y, float width, float height, out IntPtr texture);
405 static internal extern Status GdipCreateTexture2I (IntPtr image, WrapMode wrapMode, int x, int y, int width, int height, out IntPtr texture);
407 static internal extern Status GdipCreateTexture2 (IntPtr image, WrapMode wrapMode, float x, float y, float width, float height, out IntPtr texture);
409 static internal extern Status GdipGetTextureTransform (IntPtr texture, IntPtr matrix);
411 static internal extern Status GdipSetTextureTransform (IntPtr texture, IntPtr matrix);
413 static internal extern Status GdipGetTextureWrapMode (IntPtr texture, out WrapMode wrapMode);
415 static internal extern Status GdipSetTextureWrapMode (IntPtr texture, WrapMode wrapMode);
417 static internal extern Status GdipMultiplyTextureTransform (IntPtr texture, IntPtr matrix, MatrixOrder order);
419 static internal extern Status GdipResetTextureTransform (IntPtr texture);
421 static internal extern Status GdipRotateTextureTransform (IntPtr texture, float angle, MatrixOrder order);
423 static internal extern Status GdipScaleTextureTransform (IntPtr texture, float sx, float sy, MatrixOrder order);
425 static internal extern Status GdipTranslateTextureTransform (IntPtr texture, float dx, float dy, MatrixOrder order);
427 // PathGradientBrush functions
429 static internal extern Status GdipCreatePathGradientFromPath (IntPtr path, out IntPtr brush);
431 static internal extern Status GdipCreatePathGradientI (Point [] points, int count, WrapMode wrapMode, out IntPtr brush);
433 static internal extern Status GdipCreatePathGradient (PointF [] points, int count, WrapMode wrapMode, out IntPtr brush);
435 static internal extern Status GdipGetPathGradientBlendCount (IntPtr brush, out int count);
437 static internal extern Status GdipGetPathGradientBlend (IntPtr brush, float [] blend, float [] positions, int count);
439 static internal extern Status GdipSetPathGradientBlend (IntPtr brush, float [] blend, float [] positions, int count);
441 static internal extern Status GdipGetPathGradientCenterColor (IntPtr brush, out int color);
443 static internal extern Status GdipSetPathGradientCenterColor (IntPtr brush, int color);
445 static internal extern Status GdipGetPathGradientCenterPoint (IntPtr brush, out PointF point);
447 static internal extern Status GdipSetPathGradientCenterPoint (IntPtr brush, ref PointF point);
449 static internal extern Status GdipGetPathGradientFocusScales (IntPtr brush, out float xScale, out float yScale);
451 static internal extern Status GdipSetPathGradientFocusScales (IntPtr brush, float xScale, float yScale);
453 static internal extern Status GdipGetPathGradientPresetBlendCount (IntPtr brush, out int count);
455 static internal extern Status GdipGetPathGradientPresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
457 static internal extern Status GdipSetPathGradientPresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
459 static internal extern Status GdipGetPathGradientRect (IntPtr brush, out RectangleF rect);
461 static internal extern Status GdipGetPathGradientSurroundColorCount (IntPtr brush, out int count);
463 static internal extern Status GdipGetPathGradientSurroundColorsWithCount (IntPtr brush, int [] color, ref int count);
465 static internal extern Status GdipSetPathGradientSurroundColorsWithCount (IntPtr brush, int [] color, ref int count);
467 static internal extern Status GdipGetPathGradientTransform (IntPtr brush, IntPtr matrix);
469 static internal extern Status GdipSetPathGradientTransform (IntPtr brush, IntPtr matrix);
471 static internal extern Status GdipGetPathGradientWrapMode (IntPtr brush, out WrapMode wrapMode);
473 static internal extern Status GdipSetPathGradientWrapMode (IntPtr brush, WrapMode wrapMode);
475 static internal extern Status GdipSetPathGradientLinearBlend (IntPtr brush, float focus, float scale);
477 static internal extern Status GdipSetPathGradientSigmaBlend (IntPtr brush, float focus, float scale);
479 static internal extern Status GdipMultiplyPathGradientTransform (IntPtr texture, IntPtr matrix, MatrixOrder order);
481 static internal extern Status GdipResetPathGradientTransform (IntPtr brush);
483 static internal extern Status GdipRotatePathGradientTransform (IntPtr brush, float angle, MatrixOrder order);
485 static internal extern Status GdipScalePathGradientTransform (IntPtr brush, float sx, float sy, MatrixOrder order);
487 static internal extern Status GdipTranslatePathGradientTransform (IntPtr brush, float dx, float dy, MatrixOrder order);
489 // LinearGradientBrush functions
491 static internal extern Status GdipCreateLineBrushI (ref Point point1, ref Point point2, int color1, int color2, WrapMode wrapMode, out IntPtr brush);
493 static internal extern Status GdipCreateLineBrush (ref PointF point1, ref PointF point2, int color1, int color2, WrapMode wrapMode, out IntPtr brush);
495 static internal extern Status GdipCreateLineBrushFromRectI (ref Rectangle rect, int color1, int color2, LinearGradientMode linearGradientMode, WrapMode wrapMode, out IntPtr brush);
497 static internal extern Status GdipCreateLineBrushFromRect (ref RectangleF rect, int color1, int color2, LinearGradientMode linearGradientMode, WrapMode wrapMode, out IntPtr brush);
499 static internal extern Status GdipCreateLineBrushFromRectWithAngleI (ref Rectangle rect, int color1, int color2, float angle, bool isAngleScaleable, WrapMode wrapMode, out IntPtr brush);
501 static internal extern Status GdipCreateLineBrushFromRectWithAngle (ref RectangleF rect, int color1, int color2, float angle, bool isAngleScaleable, WrapMode wrapMode, out IntPtr brush);
503 static internal extern Status GdipGetLineBlendCount (IntPtr brush, out int count);
505 static internal extern Status GdipSetLineBlend (IntPtr brush, float [] blend, float [] positions, int count);
507 static internal extern Status GdipGetLineBlend (IntPtr brush, float [] blend, float [] positions, int count);
509 static internal extern Status GdipSetLineGammaCorrection (IntPtr brush, bool useGammaCorrection);
511 static internal extern Status GdipGetLineGammaCorrection (IntPtr brush, out bool useGammaCorrection);
513 static internal extern Status GdipGetLinePresetBlendCount (IntPtr brush, out int count);
515 static internal extern Status GdipSetLinePresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
517 static internal extern Status GdipGetLinePresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
519 static internal extern Status GdipSetLineColors (IntPtr brush, int color1, int color2);
521 static internal extern Status GdipGetLineColors (IntPtr brush, int [] colors);
523 static internal extern Status GdipGetLineRectI (IntPtr brush, out Rectangle rect);
525 static internal extern Status GdipGetLineRect (IntPtr brush, out RectangleF rect);
527 static internal extern Status GdipSetLineTransform (IntPtr brush, IntPtr matrix);
529 static internal extern Status GdipGetLineTransform (IntPtr brush, IntPtr matrix);
531 static internal extern Status GdipSetLineWrapMode (IntPtr brush, WrapMode wrapMode);
533 static internal extern Status GdipGetLineWrapMode (IntPtr brush, out WrapMode wrapMode);
535 static internal extern Status GdipSetLineLinearBlend (IntPtr brush, float focus, float scale);
537 static internal extern Status GdipSetLineSigmaBlend (IntPtr brush, float focus, float scale);
539 static internal extern Status GdipMultiplyLineTransform (IntPtr brush, IntPtr matrix, MatrixOrder order);
541 static internal extern Status GdipResetLineTransform (IntPtr brush);
543 static internal extern Status GdipRotateLineTransform (IntPtr brush, float angle, MatrixOrder order);
545 static internal extern Status GdipScaleLineTransform (IntPtr brush, float sx, float sy, MatrixOrder order);
547 static internal extern Status GdipTranslateLineTransform (IntPtr brush, float dx, float dy, MatrixOrder order);
549 // Graphics functions
551 static internal extern Status GdipCreateFromHDC(IntPtr hDC, out IntPtr graphics);
553 static internal extern Status GdipDeleteGraphics(IntPtr graphics);
555 static internal extern Status GdipRestoreGraphics(IntPtr graphics, uint graphicsState);
557 static internal extern Status GdipSaveGraphics(IntPtr graphics, out uint state);
559 static internal extern Status GdipMultiplyWorldTransform (IntPtr graphics, IntPtr matrix, MatrixOrder order);
562 static internal extern Status GdipRotateWorldTransform(IntPtr graphics, float angle, MatrixOrder order);
564 static internal extern Status GdipTranslateWorldTransform(IntPtr graphics, float dx, float dy, MatrixOrder order);
566 static internal extern Status GdipDrawArc (IntPtr graphics, IntPtr pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
568 static internal extern Status GdipDrawArcI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height, float startAngle, float sweepAngle);
570 static internal extern Status GdipDrawBezier (IntPtr graphics, IntPtr pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
572 static internal extern Status GdipDrawBezierI (IntPtr graphics, IntPtr pen, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
574 static internal extern Status GdipDrawEllipseI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
576 static internal extern Status GdipDrawEllipse (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
578 static internal extern Status GdipDrawLine (IntPtr graphics, IntPtr pen, float x1, float y1, float x2, float y2);
580 static internal extern Status GdipDrawLineI (IntPtr graphics, IntPtr pen, int x1, int y1, int x2, int y2);
581 [DllImport (GdiPlus)]
582 static internal extern Status GdipDrawLines (IntPtr graphics, IntPtr pen, PointF [] points, int count);
583 [DllImport (GdiPlus)]
584 static internal extern Status GdipDrawLinesI (IntPtr graphics, IntPtr pen, Point [] points, int count);
585 [DllImport (GdiPlus)]
586 static internal extern Status GdipDrawPath (IntPtr graphics, IntPtr pen, IntPtr path);
587 [DllImport (GdiPlus)]
588 static internal extern Status GdipDrawPie (IntPtr graphics, IntPtr pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
589 [DllImport (GdiPlus)]
590 static internal extern Status GdipDrawPieI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height, float startAngle, float sweepAngle);
591 [DllImport (GdiPlus)]
592 static internal extern Status GdipDrawPolygon (IntPtr graphics, IntPtr pen, PointF [] points, int count);
593 [DllImport (GdiPlus)]
594 static internal extern Status GdipDrawPolygonI (IntPtr graphics, IntPtr pen, Point [] points, int count);
595 [DllImport (GdiPlus)]
596 static internal extern Status GdipDrawRectangle (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
597 [DllImport (GdiPlus)]
598 static internal extern Status GdipDrawRectangleI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
599 [DllImport (GdiPlus)]
600 static internal extern Status GdipDrawRectangles (IntPtr graphics, IntPtr pen, RectangleF [] rects, int count);
601 [DllImport (GdiPlus)]
602 static internal extern Status GdipDrawRectanglesI (IntPtr graphics, IntPtr pen, Rectangle [] rects, int count);
604 static internal extern Status GdipFillEllipseI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
606 static internal extern Status GdipFillEllipse (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
607 [DllImport (GdiPlus)]
608 static internal extern Status GdipFillPolygon (IntPtr graphics, IntPtr brush, PointF [] points, int count, FillMode fillMode);
609 [DllImport (GdiPlus)]
610 static internal extern Status GdipFillPolygonI (IntPtr graphics, IntPtr brush, Point [] points, int count, FillMode fillMode);
611 [DllImport (GdiPlus)]
612 static internal extern Status GdipFillPolygon2 (IntPtr graphics, IntPtr brush, PointF [] points, int count);
613 [DllImport (GdiPlus)]
614 static internal extern Status GdipFillPolygon2I (IntPtr graphics, IntPtr brush, Point [] points, int count);
616 static internal extern Status GdipFillRectangle (IntPtr graphics, IntPtr brush, float x1, float y1, float x2, float y2);
618 static internal extern Status GdipFillRectangleI (IntPtr graphics, IntPtr brush, int x1, int y1, int x2, int y2);
620 static internal extern Status GdipFillRectangles (IntPtr graphics, IntPtr brush, RectangleF [] rects, int count);
622 static internal extern Status GdipFillRectanglesI (IntPtr graphics, IntPtr brush, Rectangle [] rects, int count);
623 [DllImport(GdiPlus, CharSet=CharSet.Unicode)]
624 static internal extern Status GdipDrawString (IntPtr graphics, string text, int len, IntPtr font, ref RectangleF rc, IntPtr format, IntPtr brush);
626 static internal extern Status GdipGetDC (IntPtr graphics, out IntPtr hdc);
628 static internal extern Status GdipReleaseDC (IntPtr graphics, IntPtr hdc);
630 static internal extern Status GdipDrawImageRectI (IntPtr graphics, IntPtr image, int x, int y, int width, int height);
631 [DllImport (GdiPlus)]
632 static internal extern Status GdipGetRenderingOrigin (IntPtr graphics, out int x, out int y);
633 [DllImport (GdiPlus)]
634 static internal extern Status GdipSetRenderingOrigin (IntPtr graphics, int x, int y);
636 internal static extern Status GdipCloneBitmapArea (float x, float y, float width, float height, PixelFormat format, IntPtr original, out IntPtr bitmap);
638 internal static extern Status GdipCloneBitmapAreaI (int x, int y, int width, int height, PixelFormat format, IntPtr original, out IntPtr bitmap);
640 internal static extern Status GdipResetWorldTransform (IntPtr graphics);
642 internal static extern Status GdipSetWorldTransform (IntPtr graphics, IntPtr matrix);
644 internal static extern Status GdipGetWorldTransform (IntPtr graphics, IntPtr matrix);
646 internal static extern Status GdipScaleWorldTransform (IntPtr graphics, float sx, float sy, MatrixOrder order);
648 internal static extern Status GdipGraphicsClear(IntPtr graphics, int argb);
650 internal static extern Status GdipDrawClosedCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
652 internal static extern Status GdipDrawClosedCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
654 internal static extern Status GdipDrawClosedCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
656 internal static extern Status GdipDrawClosedCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
658 internal static extern Status GdipDrawCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
660 internal static extern Status GdipDrawCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
662 internal static extern Status GdipDrawCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
664 internal static extern Status GdipDrawCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
666 internal static extern Status GdipDrawCurve3(IntPtr graphics, IntPtr pen, PointF [] points, int count, int offset, int numberOfSegments, float tension);
668 internal static extern Status GdipDrawCurve3I(IntPtr graphics, IntPtr pen, Point [] points, int count, int offset, int numberOfSegments, float tension);
670 internal static extern Status GdipSetClipRect(IntPtr graphics, float x, float y, float width, float height, CombineMode combineMode);
672 internal static extern Status GdipSetClipRectI(IntPtr graphics, int x, int y, int width, int height, CombineMode combineMode);
674 internal static extern Status GdipSetClipPath(IntPtr graphics, IntPtr path, CombineMode combineMode);
676 internal static extern Status GdipSetClipRegion(IntPtr graphics, IntPtr region, CombineMode combineMode);
678 internal static extern Status GdipSetClipGraphics(IntPtr graphics, IntPtr srcgraphics, CombineMode combineMode);
680 internal static extern Status GdipResetClip(IntPtr graphics);
682 internal static extern Status GdipEndContainer(IntPtr graphics, uint state);
684 internal static extern Status GdipGetClip (IntPtr graphics, IntPtr region);
687 internal static extern Status GdipFillClosedCurve(IntPtr graphics, IntPtr brush, PointF [] points, int count);
690 internal static extern Status GdipFillClosedCurveI(IntPtr graphics, IntPtr brush, Point [] points, int count);
693 internal static extern Status GdipFillClosedCurve2(IntPtr graphics, IntPtr brush,
694 PointF [] points, int count, float tension, FillMode fillMode);
697 internal static extern Status GdipFillClosedCurve2I(IntPtr graphics, IntPtr brush,
698 Point [] points, int count, float tension, FillMode fillMode);
701 internal static extern Status GdipFillPie(IntPtr graphics, IntPtr brush, float x, float y,
702 float width, float height, float startAngle, float sweepAngle);
705 internal static extern Status GdipFillPieI(IntPtr graphics, IntPtr brush, int x, int y,
706 int width, int height, float startAngle, float sweepAngle);
709 internal static extern Status GdipFillPath(IntPtr graphics, IntPtr brush, IntPtr path);
712 internal static extern Status GdipGetNearestColor(IntPtr graphics, out int argb);
715 internal static extern Status GdipIsVisiblePoint(IntPtr graphics, float x, float y, out bool result);
718 internal static extern Status GdipIsVisiblePointI(IntPtr graphics, int x, int y, out bool result);
721 internal static extern Status GdipIsVisibleRect(IntPtr graphics, float x, float y,
722 float width, float height, out bool result);
725 internal static extern Status GdipIsVisibleRectI(IntPtr graphics, int x, int y,
726 int width, int height, out bool result);
729 internal static extern Status GdipTransformPoints(IntPtr graphics, CoordinateSpace destSpace,
730 CoordinateSpace srcSpace, IntPtr points, int count);
733 internal static extern Status GdipTransformPointsI(IntPtr graphics, CoordinateSpace destSpace,
734 CoordinateSpace srcSpace, IntPtr points, int count);
737 internal static extern Status GdipTranslateClip(IntPtr graphics, float dx, float dy);
739 internal static extern Status GdipTranslateClipI(IntPtr graphics, int dx, int dy);
741 internal static extern Status GdipGetClipBounds(IntPtr graphics, out RectangleF rect);
743 internal static extern Status GdipSetCompositingMode(IntPtr graphics, CompositingMode compositingMode);
745 internal static extern Status GdipGetCompositingMode(IntPtr graphics, out CompositingMode compositingMode);
747 internal static extern Status GdipSetCompositingQuality(IntPtr graphics, CompositingQuality compositingQuality);
749 internal static extern Status GdipGetCompositingQuality(IntPtr graphics, out CompositingQuality compositingQuality);
751 internal static extern Status GdipSetInterpolationMode(IntPtr graphics, InterpolationMode interpolationMode);
753 internal static extern Status GdipGetInterpolationMode(IntPtr graphics, out InterpolationMode interpolationMode);
755 internal static extern Status GdipGetDpiX(IntPtr graphics, out float dpi);
757 internal static extern Status GdipGetDpiY(IntPtr graphics, out float dpi);
759 internal static extern Status GdipIsClipEmpty(IntPtr graphics, out bool result);
761 internal static extern Status GdipIsVisibleClipEmpty(IntPtr graphics, out bool result);
763 internal static extern Status GdipGetPageUnit(IntPtr graphics, out GraphicsUnit unit);
765 internal static extern Status GdipGetPageScale(IntPtr graphics, out float scale);
767 internal static extern Status GdipSetPageUnit(IntPtr graphics, GraphicsUnit unit);
769 internal static extern Status GdipSetPageScale(IntPtr graphics, float scale);
771 internal static extern Status GdipSetPixelOffsetMode(IntPtr graphics, PixelOffsetMode pixelOffsetMode);
773 internal static extern Status GdipGetPixelOffsetMode(IntPtr graphics, out PixelOffsetMode pixelOffsetMode);
775 internal static extern Status GdipSetSmoothingMode(IntPtr graphics, SmoothingMode smoothingMode);
777 internal static extern Status GdipGetSmoothingMode(IntPtr graphics, out SmoothingMode smoothingMode);
779 internal static extern Status GdipSetTextContrast(IntPtr graphics, int contrast);
781 internal static extern Status GdipGetTextContrast(IntPtr graphics, out int contrast);
783 internal static extern Status GdipSetTextRenderingHint(IntPtr graphics, TextRenderingHint mode);
785 internal static extern Status GdipGetTextRenderingHint(IntPtr graphics, out TextRenderingHint mode);
787 internal static extern Status GdipGetVisibleClipBounds(IntPtr graphics, out RectangleF rect);
790 internal static extern Status GdipFlush(IntPtr graphics, FlushIntention intention);
792 [DllImport(GdiPlus, CharSet=CharSet.Unicode)]
793 internal static extern Status GdipAddPathString (IntPtr path, string s, int lenght, IntPtr family, int style, float emSize, ref RectangleF layoutRect, IntPtr format);
794 [DllImport(GdiPlus, CharSet=CharSet.Unicode)]
795 internal static extern Status GdipAddPathStringI (IntPtr path, string s, int lenght, IntPtr family, int style, float emSize, ref Rectangle layoutRect, IntPtr format);
800 internal static extern Status GdipCreatePen1 (int argb, float width, GraphicsUnit unit, out IntPtr pen);
802 internal static extern Status GdipCreatePen2 (IntPtr brush, float width, GraphicsUnit unit, out IntPtr pen);
804 internal static extern Status GdipClonePen (IntPtr pen, out IntPtr clonepen);
806 internal static extern Status GdipDeletePen(IntPtr pen);
808 internal static extern Status GdipSetPenBrushFill (IntPtr pen, IntPtr brush);
810 internal static extern Status GdipGetPenBrushFill (IntPtr pen, out IntPtr brush);
812 internal static extern Status GdipGetPenFillType (IntPtr pen, out PenType type);
814 internal static extern Status GdipSetPenColor (IntPtr pen, int color);
816 internal static extern Status GdipGetPenColor (IntPtr pen, out int color);
818 internal static extern Status GdipSetPenCompoundArray (IntPtr pen, float[] dash, int count);
820 internal static extern Status GdipGetPenCompoundArray (IntPtr pen, float[] dash, int count);
822 internal static extern Status GdipGetPenCompoundCount (IntPtr pen, out int count);
824 internal static extern Status GdipSetPenDashCap197819 (IntPtr pen, DashCap dashCap);
826 internal static extern Status GdipGetPenDashCap197819 (IntPtr pen, out DashCap dashCap);
828 internal static extern Status GdipSetPenDashStyle (IntPtr pen, DashStyle dashStyle);
830 internal static extern Status GdipGetPenDashStyle (IntPtr pen, out DashStyle dashStyle);
832 internal static extern Status GdipSetPenDashOffset (IntPtr pen, float offset);
834 internal static extern Status GdipGetPenDashOffset (IntPtr pen, out float offset);
836 internal static extern Status GdipGetPenDashCount (IntPtr pen, out int count);
838 internal static extern Status GdipSetPenDashArray (IntPtr pen, float[] dash, int count);
840 internal static extern Status GdipGetPenDashArray (IntPtr pen, float[] dash, int count);
842 internal static extern Status GdipSetPenMiterLimit (IntPtr pen, float miterLimit);
844 internal static extern Status GdipGetPenMiterLimit (IntPtr pen, out float miterLimit);
846 internal static extern Status GdipSetPenLineJoin (IntPtr pen, LineJoin lineJoin);
848 internal static extern Status GdipGetPenLineJoin (IntPtr pen, out LineJoin lineJoin);
850 internal static extern Status GdipSetPenLineCap197819 (IntPtr pen, LineCap startCap, LineCap endCap, DashCap dashCap);
852 internal static extern Status GdipSetPenMode (IntPtr pen, PenAlignment alignment);
854 internal static extern Status GdipGetPenMode (IntPtr pen, out PenAlignment alignment);
856 internal static extern Status GdipSetPenStartCap (IntPtr pen, LineCap startCap);
858 internal static extern Status GdipGetPenStartCap (IntPtr pen, out LineCap startCap);
860 internal static extern Status GdipSetPenEndCap (IntPtr pen, LineCap endCap);
862 internal static extern Status GdipGetPenEndCap (IntPtr pen, out LineCap endCap);
864 internal static extern Status GdipSetPenCustomStartCap (IntPtr pen, IntPtr customCap);
866 internal static extern Status GdipGetPenCustomStartCap (IntPtr pen, out IntPtr customCap);
868 internal static extern Status GdipSetPenCustomEndCap (IntPtr pen, IntPtr customCap);
870 internal static extern Status GdipGetPenCustomEndCap (IntPtr pen, out IntPtr customCap);
872 internal static extern Status GdipSetPenTransform (IntPtr pen, IntPtr matrix);
874 internal static extern Status GdipGetPenTransform (IntPtr pen, IntPtr matrix);
876 internal static extern Status GdipSetPenWidth (IntPtr pen, float width);
878 internal static extern Status GdipGetPenWidth (IntPtr pen, out float width);
880 internal static extern Status GdipResetPenTransform (IntPtr pen);
882 internal static extern Status GdipMultiplyPenTransform (IntPtr pen, IntPtr matrix, MatrixOrder order);
884 internal static extern Status GdipRotatePenTransform (IntPtr pen, float angle, MatrixOrder order);
886 internal static extern Status GdipScalePenTransform (IntPtr pen, float sx, float sy, MatrixOrder order);
888 internal static extern Status GdipTranslatePenTransform (IntPtr pen, float dx, float dy, MatrixOrder order);
890 // CustomLineCap functions
892 internal static extern Status GdipCreateCustomLineCap (IntPtr fillPath, IntPtr strokePath, LineCap baseCap, float baseInset, out IntPtr customCap);
894 internal static extern Status GdipDeleteCustomLineCap (IntPtr customCap);
896 internal static extern Status GdipCloneCustomLineCap (IntPtr customCap, out IntPtr clonedCap);
898 internal static extern Status GdipSetCustomLineCapStrokeCaps (IntPtr customCap, LineCap startCap, LineCap endCap);
900 internal static extern Status GdipGetCustomLineCapStrokeCaps (IntPtr customCap, out LineCap startCap, out LineCap endCap);
902 internal static extern Status GdipSetCustomLineCapStrokeJoin (IntPtr customCap, LineJoin lineJoin);
904 internal static extern Status GdipGetCustomLineCapStrokeJoin (IntPtr customCap, out LineJoin lineJoin);
906 internal static extern Status GdipSetCustomLineCapBaseCap (IntPtr customCap, LineCap baseCap);
908 internal static extern Status GdipGetCustomLineCapBaseCap (IntPtr customCap, out LineCap baseCap);
910 internal static extern Status GdipSetCustomLineCapBaseInset (IntPtr customCap, float inset);
912 internal static extern Status GdipGetCustomLineCapBaseInset (IntPtr customCap, out float inset);
914 internal static extern Status GdipSetCustomLineCapWidthScale (IntPtr customCap, float widthScale);
916 internal static extern Status GdipGetCustomLineCapWidthScale (IntPtr customCap, out float widthScale);
918 // AdjustableArrowCap functions
920 internal static extern Status GdipCreateAdjustableArrowCap (float height, float width, bool isFilled, out IntPtr arrowCap);
922 internal static extern Status GdipSetAdjustableArrowCapHeight (IntPtr arrowCap, float height);
924 internal static extern Status GdipGetAdjustableArrowCapHeight (IntPtr arrowCap, out float height);
926 internal static extern Status GdipSetAdjustableArrowCapWidth (IntPtr arrowCap, float width);
928 internal static extern Status GdipGetAdjustableArrowCapWidth (IntPtr arrowCap, out float width);
930 internal static extern Status GdipSetAdjustableArrowCapMiddleInset (IntPtr arrowCap, float middleInset);
932 internal static extern Status GdipGetAdjustableArrowCapMiddleInset (IntPtr arrowCap, out float middleInset);
934 internal static extern Status GdipSetAdjustableArrowCapFillState (IntPtr arrowCap, bool isFilled);
936 internal static extern Status GdipGetAdjustableArrowCapFillState (IntPtr arrowCap, out bool isFilled);
940 internal static extern Status GdipCreateFromHWND (IntPtr hwnd, out IntPtr graphics);
942 [DllImport(GdiPlus, CharSet=CharSet.Unicode)]
943 internal unsafe static extern Status GdipMeasureString(IntPtr graphics, string str, int length,
944 IntPtr font, ref RectangleF layoutRect, IntPtr stringFormat, out RectangleF boundingBox,
945 int *codepointsFitted, int *linesFilled);
947 [DllImport(GdiPlus, CharSet=CharSet.Unicode)]
948 internal static extern Status GdipMeasureCharacterRanges (IntPtr graphics, string str, int length, IntPtr font,
949 ref RectangleF layoutRect, IntPtr stringFormat, int regcount, out IntPtr regions);
952 internal static extern Status GdipSetStringFormatMeasurableCharacterRanges (IntPtr native,
953 int cnt, CharacterRange [] range);
956 internal static extern Status GdipGetStringFormatMeasurableCharacterRangeCount (IntPtr native,
961 internal static extern Status GdipCreateBitmapFromScan0 (int width, int height, int stride, PixelFormat format, IntPtr scan0, out IntPtr bmp);
964 internal static extern Status GdipCreateBitmapFromGraphics (int width, int height, IntPtr target, out IntPtr bitmap);
967 internal static extern Status GdipBitmapLockBits (IntPtr bmp, ref Rectangle rc, ImageLockMode flags, PixelFormat format, [In, Out] BitmapData bmpData);
970 internal static extern Status GdipBitmapSetResolution(IntPtr bmp, float xdpi, float ydpi);
973 internal static extern Status GdipBitmapUnlockBits (IntPtr bmp, [In,Out] BitmapData bmpData);
976 internal static extern Status GdipBitmapGetPixel (IntPtr bmp, int x, int y, out int argb);
979 internal static extern Status GdipBitmapSetPixel (IntPtr bmp, int x, int y, int argb);
982 [DllImport(GdiPlus, CharSet=CharSet.Auto)]
983 internal static extern Status GdipLoadImageFromFile ( [MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr image );
986 // Stream functions for Win32 (original Win32 ones)
987 [DllImport(GdiPlus, ExactSpelling=true, CharSet=CharSet.Unicode)]
988 internal static extern Status GdipLoadImageFromStream([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, out IntPtr image);
990 [DllImport(GdiPlus, ExactSpelling=true, CharSet=CharSet.Unicode)]
991 internal static extern Status GdipSaveImageToStream(HandleRef image, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, [In()] ref Guid clsidEncoder, HandleRef encoderParams);
995 internal static extern Status GdipCloneImage(IntPtr image, out IntPtr imageclone);
997 [DllImport(GdiPlus, CharSet=CharSet.Auto)]
998 internal static extern Status GdipLoadImageFromFileICM ( [MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr image );
1000 [DllImport(GdiPlus)]
1001 internal static extern Status GdipCreateBitmapFromHBITMAP ( IntPtr hBitMap, IntPtr gdiPalette, out IntPtr image );
1003 [DllImport(GdiPlus)]
1004 internal static extern Status GdipDisposeImage ( IntPtr image );
1006 [DllImport(GdiPlus)]
1007 internal static extern Status GdipGetImageFlags(IntPtr image, out int flag);
1009 [DllImport (GdiPlus)]
1010 internal static extern Status GdipGetImageType (IntPtr image, out ImageType type);
1012 [DllImport(GdiPlus)]
1013 internal static extern Status GdipImageGetFrameDimensionsCount ( IntPtr image, out uint count );
1015 [DllImport(GdiPlus)]
1016 internal static extern Status GdipImageGetFrameDimensionsList ( IntPtr image, [Out] Guid [] dimensionIDs, uint count );
1018 [DllImport(GdiPlus)]
1019 internal static extern Status GdipGetImageHeight (IntPtr image, out uint height);
1021 [DllImport(GdiPlus)]
1022 internal static extern Status GdipGetImageHorizontalResolution ( IntPtr image, out float resolution );
1024 [DllImport(GdiPlus)]
1025 internal static extern Status GdipGetImagePaletteSize ( IntPtr image, out int size );
1027 [DllImport(GdiPlus)]
1028 internal static extern Status GdipGetImagePalette (IntPtr image, IntPtr palette, int size);
1030 [DllImport(GdiPlus)]
1031 internal static extern Status GdipSetImagePalette (IntPtr image, IntPtr palette);
1033 [DllImport(GdiPlus)]
1034 internal static extern Status GdipGetImageDimension ( IntPtr image, out float width, out float height );
1036 [DllImport(GdiPlus)]
1037 internal static extern Status GdipGetImagePixelFormat ( IntPtr image, out PixelFormat format );
1039 [DllImport(GdiPlus)]
1040 internal static extern Status GdipGetPropertyCount (IntPtr image, out uint propNumbers);
1042 [DllImport(GdiPlus)]
1043 internal static extern Status GdipGetPropertyIdList (IntPtr image, uint propNumbers, [Out] int [] list);
1045 [DllImport(GdiPlus)]
1046 internal static extern Status GdipGetPropertySize (IntPtr image, out int bufferSize, out int propNumbers);
1048 [DllImport(GdiPlus)]
1049 internal static extern Status GdipGetAllPropertyItems (IntPtr image, int bufferSize, int propNumbers, IntPtr items);
1051 [DllImport(GdiPlus)]
1052 internal static extern Status GdipGetImageRawFormat ( IntPtr image, out Guid format );
1054 [DllImport(GdiPlus)]
1055 internal static extern Status GdipGetImageVerticalResolution ( IntPtr image, out float resolution );
1057 [DllImport(GdiPlus)]
1058 internal static extern Status GdipGetImageWidth (IntPtr image, out uint width);
1060 [DllImport(GdiPlus)]
1061 internal static extern Status GdipGetImageBounds ( IntPtr image, out RectangleF source, ref GraphicsUnit unit );
1063 [DllImport(GdiPlus)]
1064 internal static extern Status GdipGetEncoderParameterListSize ( IntPtr image, ref Guid encoder, out uint size );
1066 [DllImport(GdiPlus)]
1067 internal static extern Status GdipGetEncoderParameterList ( IntPtr image, ref Guid encoder, uint size, IntPtr buffer );
1069 [DllImport(GdiPlus)]
1070 internal static extern Status GdipImageGetFrameCount (IntPtr image, ref Guid guidDimension, out uint count );
1072 [DllImport(GdiPlus)]
1073 internal static extern Status GdipImageSelectActiveFrame (IntPtr image, ref Guid guidDimension, int frameIndex);
1075 [DllImport(GdiPlus)]
1076 internal static extern Status GdipGetPropertyItemSize (IntPtr image, int propertyID, out int propertySize);
1078 [DllImport(GdiPlus)]
1079 internal static extern Status GdipGetPropertyItem (IntPtr image, int propertyID, int propertySize, IntPtr buffer);
1081 [DllImport(GdiPlus)]
1082 internal static extern Status GdipRemovePropertyItem (IntPtr image, int propertyId);
1084 [DllImport(GdiPlus)]
1085 internal unsafe static extern Status GdipSetPropertyItem (IntPtr image, GdipPropertyItem *propertyItem);
1087 [DllImport(GdiPlus)]
1088 internal static extern Status GdipGetImageThumbnail ( IntPtr image, uint width, uint height, out IntPtr thumbImage, IntPtr callback, IntPtr callBackData );
1090 [DllImport(GdiPlus)]
1091 internal static extern Status GdipImageRotateFlip ( IntPtr image, RotateFlipType rotateFlipType );
1093 [DllImport(GdiPlus, CharSet=CharSet.Unicode)]
1094 internal static extern Status GdipSaveImageToFile (IntPtr image, string filename, ref Guid encoderClsID, IntPtr encoderParameters);
1096 [DllImport(GdiPlus)]
1097 internal static extern Status GdipSaveAdd ( IntPtr image, IntPtr encoderParameters );
1099 [DllImport(GdiPlus)]
1100 internal static extern Status GdipSaveAddImage (IntPtr image, IntPtr imagenew, IntPtr encoderParameters);
1102 [DllImport(GdiPlus)]
1103 internal static extern Status GdipDrawImageI (IntPtr graphics, IntPtr image, int x, int y);
1104 [DllImport(GdiPlus)]
1105 internal static extern Status GdipGetImageGraphicsContext (IntPtr image, out IntPtr graphics);
1106 [DllImport(GdiPlus)]
1107 internal static extern Status GdipDrawImage (IntPtr graphics, IntPtr image, float x, float y);
1109 [DllImport(GdiPlus)]
1110 internal static extern Status GdipBeginContainer (IntPtr graphics, ref RectangleF dstrect, ref RectangleF srcrect, GraphicsUnit unit, out uint state);
1111 [DllImport(GdiPlus)]
1112 internal static extern Status GdipBeginContainerI (IntPtr graphics, ref Rectangle dstrect, ref Rectangle srcrect, GraphicsUnit unit, out uint state);
1113 [DllImport(GdiPlus)]
1114 internal static extern Status GdipBeginContainer2 (IntPtr graphics, out uint state);
1116 [DllImport(GdiPlus)]
1117 internal static extern Status GdipDrawImagePoints (IntPtr graphics, IntPtr image, PointF [] destPoints, int count);
1120 [DllImport(GdiPlus)]
1121 internal static extern Status GdipDrawImagePointsI (IntPtr graphics, IntPtr image, Point [] destPoints, int count);
1123 [DllImport(GdiPlus)]
1124 internal static extern Status GdipDrawImageRectRectI (IntPtr graphics, IntPtr image,
1125 int dstx, int dsty, int dstwidth, int dstheight,
1126 int srcx, int srcy, int srcwidth, int srcheight,
1127 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1129 [DllImport(GdiPlus)]
1130 internal static extern Status GdipDrawImageRectRect (IntPtr graphics, IntPtr image,
1131 float dstx, float dsty, float dstwidth, float dstheight,
1132 float srcx, float srcy, float srcwidth, float srcheight,
1133 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1135 [DllImport(GdiPlus)]
1136 internal static extern Status GdipDrawImagePointsRectI (IntPtr graphics, IntPtr image,
1137 Point [] destPoints, int count, int srcx, int srcy, int srcwidth, int srcheight,
1138 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1140 [DllImport(GdiPlus)]
1141 internal static extern Status GdipDrawImagePointsRect (IntPtr graphics, IntPtr image,
1142 PointF [] destPoints, int count, float srcx, float srcy, float srcwidth, float srcheight,
1143 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1145 [DllImport(GdiPlus)]
1146 internal static extern Status GdipDrawImageRect(IntPtr graphics, IntPtr image, float x, float y, float width, float height);
1147 [DllImport(GdiPlus)]
1148 internal static extern Status GdipDrawImagePointRect(IntPtr graphics, IntPtr image, float x,
1149 float y, float srcx, float srcy, float srcwidth, float srcheight, GraphicsUnit srcUnit);
1151 [DllImport(GdiPlus)]
1152 internal static extern Status GdipDrawImagePointRectI(IntPtr graphics, IntPtr image, int x,
1153 int y, int srcx, int srcy, int srcwidth,
1154 int srcheight, GraphicsUnit srcUnit);
1156 [DllImport(GdiPlus)]
1157 internal static extern Status GdipCreateStringFormat(StringFormatFlags formatAttributes, int language, out IntPtr native);
1159 [DllImport(GdiPlus)]
1160 internal static extern Status GdipCreateHBITMAPFromBitmap (IntPtr bmp, out IntPtr HandleBmp, int clrbackground);
1162 [DllImport(GdiPlus, CharSet=CharSet.Auto)]
1163 internal static extern Status GdipCreateBitmapFromFile ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr bitmap);
1165 [DllImport(GdiPlus, CharSet=CharSet.Auto)]
1166 internal static extern Status GdipCreateBitmapFromFileICM ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr bitmap);
1168 [DllImport(GdiPlus)]
1169 internal static extern Status GdipCreateHICONFromBitmap (IntPtr bmp, out IntPtr HandleIcon);
1171 [DllImport(GdiPlus)]
1172 internal static extern Status GdipCreateBitmapFromHICON (IntPtr hicon, out IntPtr bitmap);
1174 [DllImport(GdiPlus)]
1175 internal static extern Status GdipCreateBitmapFromResource (IntPtr hInstance,
1176 string lpBitmapName, out IntPtr bitmap);
1179 [DllImport (GdiPlus)]
1180 internal static extern Status GdipCreateMatrix (out IntPtr matrix);
1181 [DllImport (GdiPlus)]
1182 internal static extern Status GdipCreateMatrix2 (float m11, float m12, float m21, float m22, float dx, float dy, out IntPtr matrix);
1183 [DllImport (GdiPlus)]
1184 internal static extern Status GdipCreateMatrix3 (ref RectangleF rect, PointF [] dstplg, out IntPtr matrix);
1185 [DllImport (GdiPlus)]
1186 internal static extern Status GdipCreateMatrix3I (ref Rectangle rect, Point [] dstplg, out IntPtr matrix);
1187 [DllImport (GdiPlus)]
1188 internal static extern Status GdipDeleteMatrix (IntPtr matrix);
1190 [DllImport (GdiPlus)]
1191 internal static extern Status GdipCloneMatrix (IntPtr matrix, out IntPtr cloneMatrix);
1192 [DllImport (GdiPlus)]
1193 internal static extern Status GdipSetMatrixElements (IntPtr matrix, float m11, float m12, float m21, float m22, float dx, float dy);
1194 [DllImport (GdiPlus)]
1195 internal static extern Status GdipGetMatrixElements (IntPtr matrix, IntPtr matrixOut);
1196 [DllImport (GdiPlus)]
1197 internal static extern Status GdipMultiplyMatrix (IntPtr matrix, IntPtr matrix2, MatrixOrder order);
1198 [DllImport (GdiPlus)]
1199 internal static extern Status GdipTranslateMatrix (IntPtr matrix, float offsetX, float offsetY, MatrixOrder order);
1200 [DllImport (GdiPlus)]
1201 internal static extern Status GdipScaleMatrix (IntPtr matrix, float scaleX, float scaleY, MatrixOrder order);
1202 [DllImport (GdiPlus)]
1203 internal static extern Status GdipRotateMatrix (IntPtr matrix, float angle, MatrixOrder order);
1205 [DllImport (GdiPlus)]
1206 internal static extern Status GdipShearMatrix (IntPtr matrix, float shearX, float shearY, MatrixOrder order);
1208 [DllImport (GdiPlus)]
1209 internal static extern Status GdipInvertMatrix (IntPtr matrix);
1210 [DllImport (GdiPlus)]
1211 internal static extern Status GdipTransformMatrixPoints (IntPtr matrix, [In, Out] PointF [] pts, int count);
1212 [DllImport (GdiPlus)]
1213 internal static extern Status GdipTransformMatrixPointsI (IntPtr matrix, [In, Out] Point [] pts, int count);
1214 [DllImport (GdiPlus)]
1215 internal static extern Status GdipVectorTransformMatrixPoints (IntPtr matrix, [In, Out] PointF [] pts, int count);
1216 [DllImport (GdiPlus)]
1217 internal static extern Status GdipVectorTransformMatrixPointsI (IntPtr matrix, [In, Out] Point [] pts, int count);
1218 [DllImport (GdiPlus)]
1219 internal static extern Status GdipIsMatrixInvertible (IntPtr matrix, out bool result);
1221 [DllImport (GdiPlus)]
1222 internal static extern Status GdipIsMatrixIdentity (IntPtr matrix, out bool result);
1223 [DllImport (GdiPlus)]
1224 internal static extern Status GdipIsMatrixEqual (IntPtr matrix, IntPtr matrix2, out bool result);
1226 // GraphicsPath functions
1227 [DllImport (GdiPlus)]
1228 internal static extern Status GdipCreatePath (FillMode brushMode, out IntPtr path);
1229 [DllImport (GdiPlus)]
1230 internal static extern Status GdipCreatePath2 (PointF [] points, byte [] types, int count, FillMode brushMode, out IntPtr path);
1231 [DllImport (GdiPlus)]
1232 internal static extern Status GdipCreatePath2I (Point [] points, byte [] types, int count, FillMode brushMode, out IntPtr path);
1233 [DllImport (GdiPlus)]
1234 internal static extern Status GdipClonePath (IntPtr path, out IntPtr clonePath);
1235 [DllImport (GdiPlus)]
1236 internal static extern Status GdipDeletePath (IntPtr path);
1237 [DllImport (GdiPlus)]
1238 internal static extern Status GdipResetPath (IntPtr path);
1239 [DllImport (GdiPlus)]
1240 internal static extern Status GdipGetPointCount (IntPtr path, out int count);
1241 [DllImport (GdiPlus)]
1242 internal static extern Status GdipGetPathTypes (IntPtr path, [Out] byte [] types, int count);
1243 [DllImport (GdiPlus)]
1244 internal static extern Status GdipGetPathPoints (IntPtr path, [Out] PointF [] points, int count);
1245 [DllImport (GdiPlus)]
1246 internal static extern Status GdipGetPathPointsI (IntPtr path, [Out] Point [] points, int count);
1247 [DllImport (GdiPlus)]
1248 internal static extern Status GdipGetPathFillMode (IntPtr path, out FillMode fillMode);
1249 [DllImport (GdiPlus)]
1250 internal static extern Status GdipSetPathFillMode (IntPtr path, FillMode fillMode);
1251 [DllImport (GdiPlus)]
1252 internal static extern Status GdipStartPathFigure (IntPtr path);
1253 [DllImport (GdiPlus)]
1254 internal static extern Status GdipClosePathFigure (IntPtr path);
1255 [DllImport (GdiPlus)]
1256 internal static extern Status GdipClosePathFigures (IntPtr path);
1257 [DllImport (GdiPlus)]
1258 internal static extern Status GdipSetPathMarker (IntPtr path);
1259 [DllImport (GdiPlus)]
1260 internal static extern Status GdipClearPathMarkers (IntPtr path);
1261 [DllImport (GdiPlus)]
1262 internal static extern Status GdipReversePath (IntPtr path);
1263 [DllImport (GdiPlus)]
1264 internal static extern Status GdipGetPathLastPoint (IntPtr path, out PointF lastPoint);
1265 [DllImport (GdiPlus)]
1266 internal static extern Status GdipAddPathLine (IntPtr path, float x1, float y1, float x2, float y2);
1267 [DllImport (GdiPlus)]
1268 internal static extern Status GdipAddPathLine2 (IntPtr path, PointF[] points, int count);
1269 [DllImport (GdiPlus)]
1270 internal static extern Status GdipAddPathLine2I (IntPtr path, Point[] points, int count);
1271 [DllImport (GdiPlus)]
1272 internal static extern Status GdipAddPathArc (IntPtr path, float x, float y, float width, float height, float startAngle, float sweepAngle);
1273 [DllImport (GdiPlus)]
1274 internal static extern Status GdipAddPathBezier (IntPtr path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
1275 [DllImport (GdiPlus)]
1276 internal static extern Status GdipAddPathBeziers (IntPtr path, PointF [] points, int count);
1277 [DllImport (GdiPlus)]
1278 internal static extern Status GdipAddPathCurve (IntPtr path, PointF [] points, int count);
1279 [DllImport (GdiPlus)]
1280 internal static extern Status GdipAddPathCurveI (IntPtr path, Point [] points, int count);
1281 [DllImport (GdiPlus)]
1282 internal static extern Status GdipAddPathCurve2 (IntPtr path, PointF [] points, int count, float tension);
1283 [DllImport (GdiPlus)]
1284 internal static extern Status GdipAddPathCurve2I (IntPtr path, Point [] points, int count, float tension);
1285 [DllImport (GdiPlus)]
1286 internal static extern Status GdipAddPathCurve3 (IntPtr path, PointF [] points, int count, int offset, int numberOfSegments, float tension);
1287 [DllImport (GdiPlus)]
1288 internal static extern Status GdipAddPathCurve3I (IntPtr path, Point [] points, int count, int offset, int numberOfSegments, float tension);
1289 [DllImport (GdiPlus)]
1290 internal static extern Status GdipAddPathClosedCurve (IntPtr path, PointF [] points, int count);
1291 [DllImport (GdiPlus)]
1292 internal static extern Status GdipAddPathClosedCurveI (IntPtr path, Point [] points, int count);
1293 [DllImport (GdiPlus)]
1294 internal static extern Status GdipAddPathClosedCurve2 (IntPtr path, PointF [] points, int count, float tension);
1295 [DllImport (GdiPlus)]
1296 internal static extern Status GdipAddPathClosedCurve2I (IntPtr path, Point [] points, int count, float tension);
1297 [DllImport (GdiPlus)]
1298 internal static extern Status GdipAddPathRectangle (IntPtr path, float x, float y, float width, float height);
1299 [DllImport (GdiPlus)]
1300 internal static extern Status GdipAddPathRectangles (IntPtr path, RectangleF [] rects, int count);
1301 [DllImport (GdiPlus)]
1302 internal static extern Status GdipAddPathEllipse (IntPtr path, float x, float y, float width, float height);
1303 [DllImport (GdiPlus)]
1304 internal static extern Status GdipAddPathEllipseI (IntPtr path, int x, int y, int width, int height);
1305 [DllImport (GdiPlus)]
1306 internal static extern Status GdipAddPathPie (IntPtr path, float x, float y, float width, float height, float startAngle, float sweepAngle);
1307 [DllImport (GdiPlus)]
1308 internal static extern Status GdipAddPathPieI (IntPtr path, int x, int y, int width, int height, float startAngle, float sweepAngle);
1309 [DllImport (GdiPlus)]
1310 internal static extern Status GdipAddPathPolygon (IntPtr path, PointF [] points, int count);
1311 [DllImport (GdiPlus)]
1312 internal static extern Status GdipAddPathPath (IntPtr path, IntPtr addingPath, bool connect);
1313 [DllImport (GdiPlus)]
1314 internal static extern Status GdipAddPathLineI (IntPtr path, int x1, int y1, int x2, int y2);
1315 [DllImport (GdiPlus)]
1316 internal static extern Status GdipAddPathArcI (IntPtr path, int x, int y, int width, int height, float startAngle, float sweepAngle);
1318 [DllImport (GdiPlus)]
1319 internal static extern Status GdipAddPathBezierI (IntPtr path, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
1320 [DllImport (GdiPlus)]
1321 internal static extern Status GdipAddPathBeziersI (IntPtr path, Point [] points, int count);
1323 [DllImport (GdiPlus)]
1324 internal static extern Status GdipAddPathPolygonI (IntPtr path, Point [] points, int count);
1325 [DllImport (GdiPlus)]
1326 internal static extern Status GdipAddPathRectangleI (IntPtr path, int x, int y, int width, int height);
1327 [DllImport (GdiPlus)]
1328 internal static extern Status GdipAddPathRectanglesI (IntPtr path, Rectangle [] rects, int count);
1329 [DllImport (GdiPlus)]
1330 internal static extern Status GdipFlattenPath (IntPtr path, IntPtr matrix, float floatness);
1331 [DllImport (GdiPlus)]
1332 internal static extern Status GdipTransformPath (IntPtr path, IntPtr matrix);
1333 [DllImport (GdiPlus)]
1334 internal static extern Status GdipWarpPath (IntPtr path, IntPtr matrix,
1335 PointF [] points, int count,
1336 float srcx, float srcy, float srcwidth, float srcheight,
1337 WarpMode mode, float flatness);
1338 [DllImport (GdiPlus)]
1339 internal static extern Status GdipWidenPath (IntPtr path, IntPtr pen, IntPtr matrix, float flatness);
1340 [DllImport (GdiPlus)]
1341 internal static extern Status GdipGetPathWorldBounds (IntPtr path, out RectangleF bounds, IntPtr matrix, IntPtr pen);
1342 [DllImport (GdiPlus)]
1343 internal static extern Status GdipGetPathWorldBoundsI (IntPtr path, out Rectangle bounds, IntPtr matrix, IntPtr pen);
1344 [DllImport (GdiPlus)]
1345 internal static extern Status GdipIsVisiblePathPoint (IntPtr path, float x, float y, IntPtr graphics, out bool result);
1346 [DllImport (GdiPlus)]
1347 internal static extern Status GdipIsVisiblePathPointI (IntPtr path, int x, int y, IntPtr graphics, out bool result);
1348 [DllImport (GdiPlus)]
1349 internal static extern Status GdipIsOutlineVisiblePathPoint (IntPtr path, float x, float y, IntPtr pen, IntPtr graphics, out bool result);
1350 [DllImport (GdiPlus)]
1351 internal static extern Status GdipIsOutlineVisiblePathPointI (IntPtr path, int x, int y, IntPtr pen, IntPtr graphics, out bool result);
1353 // GraphicsPathIterator
1354 [DllImport(GdiPlus)]
1355 internal static extern Status GdipCreatePathIter (out IntPtr iterator, IntPtr path);
1356 [DllImport(GdiPlus)]
1357 internal static extern Status GdipPathIterGetCount (IntPtr iterator, out int count);
1358 [DllImport(GdiPlus)]
1359 internal static extern Status GdipPathIterGetSubpathCount (IntPtr iterator, out int count);
1360 [DllImport(GdiPlus)]
1361 internal static extern Status GdipDeletePathIter (IntPtr iterator);
1362 [DllImport(GdiPlus)]
1363 internal static extern Status GdipPathIterCopyData (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int startIndex, int endIndex);
1364 [DllImport(GdiPlus)]
1365 internal static extern Status GdipPathIterEnumerate (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int count);
1366 [DllImport(GdiPlus)]
1367 internal static extern Status GdipPathIterHasCurve (IntPtr iterator, out bool curve);
1368 [DllImport(GdiPlus)]
1369 internal static extern Status GdipPathIterNextMarkerPath (IntPtr iterator, out int resultCount, IntPtr path);
1370 [DllImport(GdiPlus)]
1371 internal static extern Status GdipPathIterNextMarker (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex);
1372 [DllImport(GdiPlus)]
1373 internal static extern Status GdipPathIterNextPathType (IntPtr iterator, out int resultCount, out byte pathType, out int startIndex, out int endIndex);
1374 [DllImport(GdiPlus)]
1375 internal static extern Status GdipPathIterNextSubpathPath (IntPtr iterator, out int resultCount, IntPtr path, out bool isClosed);
1376 [DllImport(GdiPlus)]
1377 internal static extern Status GdipPathIterNextSubpath (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex, out bool isClosed);
1378 [DllImport(GdiPlus)]
1379 internal static extern Status GdipPathIterRewind (IntPtr iterator);
1382 [DllImport (GdiPlus)]
1383 internal static extern Status GdipCreateImageAttributes (out IntPtr imageattr);
1385 [DllImport (GdiPlus)]
1386 internal static extern Status GdipSetImageAttributesColorKeys (IntPtr imageattr,
1387 ColorAdjustType type, bool enableFlag, int colorLow, int colorHigh);
1389 [DllImport (GdiPlus)]
1390 internal static extern Status GdipDisposeImageAttributes (IntPtr imageattr);
1392 [DllImport (GdiPlus)]
1393 internal static extern Status GdipSetImageAttributesColorMatrix (IntPtr imageattr,
1394 ColorAdjustType type, bool enableFlag, IntPtr colorMatrix,
1395 IntPtr grayMatrix, ColorMatrixFlag flags);
1397 [DllImport (GdiPlus)]
1398 internal static extern Status GdipSetImageAttributesGamma (IntPtr imageattr,
1399 ColorAdjustType type, bool enableFlag,
1402 [DllImport (GdiPlus)]
1403 internal static extern Status GdipSetImageAttributesNoOp (IntPtr imageattr,
1404 ColorAdjustType type, bool enableFlag);
1406 [DllImport (GdiPlus)]
1407 internal static extern Status GdipSetImageAttributesOutputChannel (IntPtr imageattr,
1408 ColorAdjustType type, bool enableFlag, ColorChannelFlag channelFlags);
1410 [DllImport (GdiPlus, CharSet=CharSet.Auto)]
1411 internal static extern Status GdipSetImageAttributesOutputChannelColorProfile (IntPtr imageattr,
1412 ColorAdjustType type, bool enableFlag, [MarshalAs (UnmanagedType.LPWStr)] string profileName);
1414 [DllImport (GdiPlus)]
1415 internal static extern Status GdipSetImageAttributesRemapTable (IntPtr imageattr,
1416 ColorAdjustType type, bool enableFlag, uint mapSize, IntPtr colorMap);
1418 [DllImport (GdiPlus)]
1419 internal static extern Status GdipSetImageAttributesThreshold (IntPtr imageattr,
1420 ColorAdjustType type, bool enableFlag, float thresHold);
1422 [DllImport (GdiPlus)]
1423 internal static extern Status GdipCloneImageAttributes(IntPtr imageattr, out IntPtr cloneImageattr);
1425 [DllImport (GdiPlus)]
1426 internal static extern Status GdipGetImageAttributesAdjustedPalette (IntPtr imageattr, IntPtr colorPalette,
1427 ColorAdjustType colorAdjustType);
1429 [DllImport (GdiPlus)]
1430 internal static extern Status GdipSetImageAttributesWrapMode(IntPtr imageattr, WrapMode wrap,
1431 int argb, bool clamp);
1435 [DllImport(GdiPlus)]
1436 internal static extern Status GdipCreateFont (IntPtr fontFamily, float emSize, FontStyle style, GraphicsUnit unit, out IntPtr font);
1437 [DllImport(GdiPlus)]
1438 internal static extern Status GdipDeleteFont (IntPtr font);
1439 [DllImport(GdiPlus, CharSet=CharSet.Auto)]
1440 internal static extern Status GdipGetLogFont(IntPtr font, IntPtr graphics, [MarshalAs(UnmanagedType.AsAny), Out] object logfontA);
1442 [DllImport(GdiPlus)]
1443 internal static extern Status GdipCreateFontFromDC(IntPtr hdc, out IntPtr font);
1444 [DllImport(GdiPlus, SetLastError=true, CharSet=CharSet.Auto)]
1445 internal static extern Status GdipCreateFontFromLogfont(IntPtr hdc, ref LOGFONT lf, out IntPtr ptr);
1447 // These are our private functions, they exists in our own libgdiplus library, this way we
1448 // avoid relying on wine in System.Drawing
1449 [DllImport(GdiPlus, CharSet=CharSet.Ansi)]
1450 internal static extern Status GdipCreateFontFromHfont(IntPtr hdc, out IntPtr font, ref LOGFONT lf);
1452 // This is win32/gdi, not gdiplus, but it's easier to keep in here, also see above comment
1453 [DllImport("gdi32.dll", CallingConvention=CallingConvention.StdCall, CharSet = CharSet.Auto)]
1454 internal static extern IntPtr CreateFontIndirect (ref LOGFONT logfont);
1455 [DllImport("user32.dll", EntryPoint="GetDC", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1456 internal static extern IntPtr GetDC(IntPtr hwnd);
1457 [DllImport("user32.dll", EntryPoint="ReleaseDC", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1458 internal static extern int ReleaseDC (IntPtr hWnd, IntPtr hDC);
1459 [DllImport("gdi32.dll", EntryPoint="SelectObject", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1460 internal static extern IntPtr SelectObject(IntPtr hdc, IntPtr obj);
1461 [DllImport("user32.dll", SetLastError=true)]
1462 internal static extern bool GetIconInfo (IntPtr hIcon, out IconInfo iconinfo);
1463 [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, SetLastError=true)]
1464 internal static extern IntPtr CreateIconIndirect ([In] ref IconInfo piconinfo);
1465 [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, SetLastError=true)]
1466 internal static extern bool DestroyIcon (IntPtr hIcon);
1467 [DllImport("gdi32.dll")]
1468 internal static extern bool DeleteObject (IntPtr hObject);
1469 [DllImport("user32.dll")]
1470 internal static extern IntPtr GetDesktopWindow ();
1472 [DllImport("gdi32.dll", SetLastError=true)]
1473 public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest,
1474 int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
1476 [DllImport ("user32.dll", EntryPoint = "GetSysColor", CallingConvention = CallingConvention.StdCall)]
1477 public static extern uint Win32GetSysColor (GetSysColorIndex index);
1480 // Some special X11 stuff
1481 [DllImport("libX11", EntryPoint="XOpenDisplay")]
1482 internal extern static IntPtr XOpenDisplay(IntPtr display);
1484 [DllImport("libX11", EntryPoint="XCloseDisplay")]
1485 internal extern static int XCloseDisplay(IntPtr display);
1487 [DllImport ("libX11", EntryPoint="XRootWindow")]
1488 internal extern static IntPtr XRootWindow(IntPtr display, int screen);
1490 [DllImport ("libX11", EntryPoint="XDefaultScreen")]
1491 internal extern static int XDefaultScreen(IntPtr display);
1493 [DllImport ("libX11", EntryPoint="XDefaultDepth")]
1494 internal extern static uint XDefaultDepth(IntPtr display, int screen);
1496 [DllImport ("libX11", EntryPoint="XGetImage")]
1497 internal extern static IntPtr XGetImage(IntPtr display, IntPtr drawable, int src_x, int src_y, int width, int height, int pane, int format);
1499 [DllImport ("libX11", EntryPoint="XGetPixel")]
1500 internal extern static int XGetPixel(IntPtr image, int x, int y);
1502 [DllImport ("libX11", EntryPoint="XDestroyImage")]
1503 internal extern static int XDestroyImage(IntPtr image);
1505 [DllImport ("libX11", EntryPoint="XDefaultVisual")]
1506 internal extern static IntPtr XDefaultVisual(IntPtr display, int screen);
1508 [DllImport ("libX11", EntryPoint="XGetVisualInfo")]
1509 internal extern static IntPtr XGetVisualInfo (IntPtr display, int vinfo_mask, ref XVisualInfo vinfo_template, ref int nitems);
1511 [DllImport ("libX11", EntryPoint="XVisualIDFromVisual")]
1512 internal extern static IntPtr XVisualIDFromVisual (IntPtr visual);
1514 [DllImport ("libX11", EntryPoint="XFree")]
1515 internal extern static void XFree (IntPtr data);
1518 [DllImport (GdiPlus)]
1519 internal static extern Status GdipGetFontCollectionFamilyCount (IntPtr collection, out int found);
1521 [DllImport (GdiPlus)]
1522 internal static extern Status GdipGetFontCollectionFamilyList (IntPtr collection, int getCount, IntPtr[] dest, out int retCount);
1523 //internal static extern Status GdipGetFontCollectionFamilyList( IntPtr collection, int getCount, [Out] FontFamily [] familyList, out int retCount );
1525 [DllImport (GdiPlus)]
1526 internal static extern Status GdipNewInstalledFontCollection (out IntPtr collection);
1528 [DllImport (GdiPlus)]
1529 internal static extern Status GdipNewPrivateFontCollection (out IntPtr collection);
1531 [DllImport (GdiPlus)]
1532 internal static extern Status GdipDeletePrivateFontCollection (ref IntPtr collection);
1534 [DllImport (GdiPlus, CharSet=CharSet.Auto)]
1535 internal static extern Status GdipPrivateAddFontFile (IntPtr collection,
1536 [MarshalAs (UnmanagedType.LPWStr)] string fileName );
1538 [DllImport (GdiPlus)]
1539 internal static extern Status GdipPrivateAddMemoryFont (IntPtr collection, IntPtr mem, int length);
1542 [DllImport (GdiPlus, CharSet=CharSet.Auto)]
1543 internal static extern Status GdipCreateFontFamilyFromName (
1544 [MarshalAs(UnmanagedType.LPWStr)] string fName, IntPtr collection, out IntPtr fontFamily);
1546 [DllImport (GdiPlus, CharSet=CharSet.Unicode)]
1547 internal static extern Status GdipGetFamilyName(IntPtr family, StringBuilder name, int language);
1549 [DllImport (GdiPlus)]
1550 internal static extern Status GdipGetGenericFontFamilySansSerif (out IntPtr fontFamily);
1552 [DllImport (GdiPlus)]
1553 internal static extern Status GdipGetGenericFontFamilySerif (out IntPtr fontFamily);
1555 [DllImport (GdiPlus)]
1556 internal static extern Status GdipGetGenericFontFamilyMonospace (out IntPtr fontFamily);
1558 [DllImport (GdiPlus)]
1559 internal static extern Status GdipGetCellAscent (IntPtr fontFamily, int style, out short ascent);
1561 [DllImport (GdiPlus)]
1562 internal static extern Status GdipGetCellDescent (IntPtr fontFamily, int style, out short descent);
1564 [DllImport (GdiPlus)]
1565 internal static extern Status GdipGetLineSpacing (IntPtr fontFamily, int style, out short spacing);
1567 [DllImport (GdiPlus)]
1568 internal static extern Status GdipGetEmHeight (IntPtr fontFamily, int style, out short emHeight);
1570 [DllImport (GdiPlus)]
1571 internal static extern Status GdipIsStyleAvailable (IntPtr fontFamily, int style, out bool styleAvailable);
1573 [DllImport (GdiPlus)]
1574 internal static extern Status GdipDeleteFontFamily (IntPtr fontFamily);
1576 [DllImport (GdiPlus)]
1577 internal static extern Status GdipGetFontSize (IntPtr font, out float size);
1579 [DllImport (GdiPlus)]
1580 internal static extern Status GdipGetFontHeight (IntPtr font, IntPtr graphics, out float height);
1582 [DllImport (GdiPlus)]
1583 internal static extern Status GdipGetFontHeightGivenDPI (IntPtr font, float dpi, out float height);
1585 [DllImport (GdiPlus)]
1586 internal static extern Status GdipCloneFontFamily (IntPtr fontFamily, out IntPtr clone);
1590 [DllImport (GdiPlus)]
1591 internal static extern Status GdipCreateStringFormat(int formatAttributes, int language, out IntPtr format);
1592 [DllImport (GdiPlus)]
1593 internal static extern Status GdipStringFormatGetGenericDefault(out IntPtr format);
1594 [DllImport (GdiPlus)]
1595 internal static extern Status GdipStringFormatGetGenericTypographic(out IntPtr format);
1596 [DllImport (GdiPlus)]
1597 internal static extern Status GdipDeleteStringFormat(IntPtr format);
1598 [DllImport (GdiPlus)]
1599 internal static extern Status GdipCloneStringFormat(IntPtr srcformat, out IntPtr format);
1600 [DllImport (GdiPlus)]
1601 internal static extern Status GdipSetStringFormatFlags(IntPtr format, StringFormatFlags flags);
1602 [DllImport (GdiPlus)]
1603 internal static extern Status GdipGetStringFormatFlags(IntPtr format, out StringFormatFlags flags);
1604 [DllImport (GdiPlus)]
1605 internal static extern Status GdipSetStringFormatAlign(IntPtr format, StringAlignment align);
1606 [DllImport (GdiPlus)]
1607 internal static extern Status GdipGetStringFormatAlign(IntPtr format, out StringAlignment align);
1608 [DllImport (GdiPlus)]
1609 internal static extern Status GdipSetStringFormatLineAlign(IntPtr format, StringAlignment align);
1610 [DllImport (GdiPlus)]
1611 internal static extern Status GdipGetStringFormatLineAlign(IntPtr format, out StringAlignment align);
1612 [DllImport (GdiPlus)]
1613 internal static extern Status GdipSetStringFormatTrimming(IntPtr format, StringTrimming trimming);
1614 [DllImport (GdiPlus)]
1615 internal static extern Status GdipGetStringFormatTrimming(IntPtr format, out StringTrimming trimming);
1616 [DllImport (GdiPlus)]
1617 internal static extern Status GdipSetStringFormatHotkeyPrefix(IntPtr format, HotkeyPrefix hotkeyPrefix);
1618 [DllImport (GdiPlus)]
1619 internal static extern Status GdipGetStringFormatHotkeyPrefix(IntPtr format, out HotkeyPrefix hotkeyPrefix);
1620 [DllImport (GdiPlus)]
1621 internal static extern Status GdipSetStringFormatTabStops(IntPtr format, float firstTabOffset, int count, float [] tabStops);
1622 [DllImport (GdiPlus)]
1623 internal static extern Status GdipGetStringFormatDigitSubstitution(IntPtr format, int language, out StringDigitSubstitute substitute);
1624 [DllImport (GdiPlus)]
1625 internal static extern Status GdipSetStringFormatDigitSubstitution(IntPtr format, int language, StringDigitSubstitute substitute);
1626 [DllImport (GdiPlus)]
1627 internal static extern Status GdipGetStringFormatTabStopCount(IntPtr format, out int count);
1628 [DllImport (GdiPlus)]
1629 internal static extern Status GdipGetStringFormatTabStops(IntPtr format, int count, out float firstTabOffset, [In, Out] float [] tabStops);
1632 [DllImport (GdiPlus, CharSet = CharSet.Auto)]
1633 internal static extern Status GdipCreateMetafileFromFile ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr metafile);
1634 [DllImport (GdiPlus)]
1635 internal static extern Status GdipCreateMetafileFromEmf (IntPtr hEmf, bool deleteEmf, out IntPtr metafile);
1636 [DllImport (GdiPlus)]
1637 internal static extern Status GdipCreateMetafileFromWmf (IntPtr hWmf, bool deleteWmf, WmfPlaceableFileHeader wmfPlaceableFileHeader, out IntPtr metafile);
1638 [DllImport (GdiPlus, CharSet = CharSet.Auto)]
1639 internal static extern Status GdipGetMetafileHeaderFromFile ([MarshalAs (UnmanagedType.LPWStr)] string filename, IntPtr header);
1640 [DllImport (GdiPlus)]
1641 internal static extern Status GdipGetMetafileHeaderFromMetafile (IntPtr metafile, IntPtr header);
1642 [DllImport (GdiPlus)]
1643 internal static extern Status GdipGetMetafileHeaderFromEmf (IntPtr hEmf, IntPtr header);
1644 [DllImport (GdiPlus)]
1645 internal static extern Status GdipGetMetafileHeaderFromWmf (IntPtr hWmf, IntPtr wmfPlaceableFileHeader, IntPtr header);
1646 [DllImport (GdiPlus)]
1647 internal static extern Status GdipGetHemfFromMetafile (IntPtr metafile, out IntPtr hEmf);
1648 [DllImport (GdiPlus)]
1649 internal static extern Status GdipGetMetafileDownLevelRasterizationLimit (IntPtr metafile, ref uint metafileRasterizationLimitDpi);
1650 [DllImport (GdiPlus)]
1651 internal static extern Status GdipSetMetafileDownLevelRasterizationLimit (IntPtr metafile, uint metafileRasterizationLimitDpi);
1652 [DllImport (GdiPlus)]
1653 internal static extern Status GdipPlayMetafileRecord (IntPtr metafile, EmfPlusRecordType recordType, int flags, int dataSize, byte[] data);
1655 [DllImport (GdiPlus)]
1656 internal static extern Status GdipRecordMetafile (IntPtr hdc, EmfType type, ref RectangleF frameRect,
1657 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1658 [DllImport (GdiPlus)]
1659 internal static extern Status GdipRecordMetafileI (IntPtr hdc, EmfType type, ref Rectangle frameRect,
1660 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1661 [DllImport (GdiPlus)]
1662 internal static extern Status GdipRecordMetafileFileName ([MarshalAs (UnmanagedType.LPWStr)] string filename, IntPtr hdc, EmfType type,
1663 ref RectangleF frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1664 [DllImport (GdiPlus)]
1665 internal static extern Status GdipRecordMetafileFileNameI ([MarshalAs (UnmanagedType.LPWStr)] string filename, IntPtr hdc, EmfType type,
1666 ref Rectangle frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1668 [DllImport(GdiPlus, ExactSpelling=true, CharSet=CharSet.Unicode)]
1669 internal static extern Status GdipCreateMetafileFromStream([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, out IntPtr metafile);
1670 [DllImport(GdiPlus, ExactSpelling=true, CharSet=CharSet.Unicode)]
1671 internal static extern Status GdipGetMetafileHeaderFromStream([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, IntPtr header);
1673 [DllImport (GdiPlus)]
1674 internal static extern Status GdipRecordMetafileStream ([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, IntPtr hdc,
1675 EmfType type, ref RectangleF frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1676 [DllImport (GdiPlus)]
1677 internal static extern Status GdipRecordMetafileStreamI ([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, IntPtr hdc,
1678 EmfType type, ref Rectangle frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1680 //ImageCodecInfo functions
1681 [DllImport(GdiPlus)]
1682 static internal extern Status GdipGetImageDecodersSize (out int decoderNums, out int arraySize);
1683 [DllImport(GdiPlus)]
1684 static internal extern Status GdipGetImageDecoders (int decoderNums, int arraySize, IntPtr decoders);
1685 [DllImport(GdiPlus)]
1686 static internal extern Status GdipGetImageEncodersSize (out int encoderNums, out int arraySize);
1687 [DllImport(GdiPlus)]
1688 static internal extern Status GdipGetImageEncoders (int encoderNums, int arraySize, IntPtr encoders);
1691 // These are stuff that is unix-only
1693 public delegate int StreamGetHeaderDelegate(IntPtr buf, int bufsz);
1694 public delegate int StreamGetBytesDelegate (IntPtr buf, int bufsz, bool peek);
1695 public delegate long StreamSeekDelegate (int offset, int whence);
1696 public delegate int StreamPutBytesDelegate (IntPtr buf, int bufsz);
1697 public delegate void StreamCloseDelegate ();
1698 public delegate long StreamSizeDelegate ();
1700 internal sealed class GdiPlusStreamHelper {
1701 public Stream stream;
1703 private StreamGetHeaderDelegate sghd = null;
1704 private StreamGetBytesDelegate sgbd = null;
1705 private StreamSeekDelegate skd = null;
1706 private StreamPutBytesDelegate spbd = null;
1707 private StreamCloseDelegate scd = null;
1708 private StreamSizeDelegate ssd = null;
1709 private byte[] start_buf;
1710 private int start_buf_pos;
1711 private int start_buf_len;
1712 private byte[] managedBuf;
1713 private const int default_bufsize = 4096;
1715 public GdiPlusStreamHelper (Stream s, bool seekToOrigin)
1717 managedBuf = new byte [default_bufsize];
1720 if (stream != null && stream.CanSeek && seekToOrigin) {
1721 stream.Seek (0, SeekOrigin.Begin);
1725 public int StreamGetHeaderImpl (IntPtr buf, int bufsz) {
1728 start_buf = new byte[bufsz];
1731 bytesRead = stream.Read (start_buf, 0, bufsz);
1732 } catch (IOException) {
1736 if (bytesRead > 0 && buf != IntPtr.Zero) {
1737 Marshal.Copy (start_buf, 0, (IntPtr) (buf.ToInt64()), bytesRead);
1741 start_buf_len = bytesRead;
1746 public StreamGetHeaderDelegate GetHeaderDelegate {
1748 if (stream != null && stream.CanRead) {
1750 sghd = new StreamGetHeaderDelegate (StreamGetHeaderImpl);
1758 public int StreamGetBytesImpl (IntPtr buf, int bufsz, bool peek)
1760 if (buf == IntPtr.Zero && peek) {
1764 if (bufsz > managedBuf.Length)
1765 managedBuf = new byte[bufsz];
1767 long streamPosition = 0;
1770 if (stream.CanSeek) {
1771 streamPosition = stream.Position;
1773 if (start_buf_len > 0) {
1774 if (start_buf_len > bufsz) {
1775 Array.Copy(start_buf, start_buf_pos, managedBuf, 0, bufsz);
1776 start_buf_pos += bufsz;
1777 start_buf_len -= bufsz;
1782 Array.Copy(start_buf, start_buf_pos, managedBuf, 0, start_buf_len);
1783 bufsz -= start_buf_len;
1784 bytesRead = start_buf_len;
1791 bytesRead += stream.Read (managedBuf, bytesRead, bufsz);
1792 } catch (IOException) {
1797 if (bytesRead > 0 && buf != IntPtr.Zero) {
1798 Marshal.Copy (managedBuf, 0, (IntPtr) (buf.ToInt64()), bytesRead);
1801 if (!stream.CanSeek && (bufsz == 10) && peek) {
1802 // Special 'hack' to support peeking of the type for gdi+ on non-seekable streams
1806 if (stream.CanSeek) {
1807 // If we are peeking bytes, then go back to original position before peeking
1808 stream.Seek (streamPosition, SeekOrigin.Begin);
1810 throw new NotSupportedException();
1818 public StreamGetBytesDelegate GetBytesDelegate {
1820 if (stream != null && stream.CanRead) {
1822 sgbd = new StreamGetBytesDelegate (StreamGetBytesImpl);
1830 public long StreamSeekImpl (int offset, int whence)
1832 // Make sure we have a valid 'whence'.
1833 if ((whence < 0) || (whence > 2))
1836 // Invalidate the start_buf if we're actually going to call a Seek method.
1837 start_buf_pos += start_buf_len;
1842 // Translate 'whence' into a SeekOrigin enum member.
1845 case 0: origin = SeekOrigin.Begin; break;
1846 case 1: origin = SeekOrigin.Current; break;
1847 case 2: origin = SeekOrigin.End; break;
1849 // The following line is redundant but necessary to avoid a
1850 // "Use of unassigned local variable" error without actually
1851 // initializing 'origin' to a dummy value.
1855 // Do the actual seek operation and return its result.
1856 return stream.Seek ((long) offset, origin);
1859 public StreamSeekDelegate SeekDelegate {
1861 if (stream != null && stream.CanSeek) {
1863 skd = new StreamSeekDelegate (StreamSeekImpl);
1871 public int StreamPutBytesImpl (IntPtr buf, int bufsz)
1873 if (bufsz > managedBuf.Length)
1874 managedBuf = new byte[bufsz];
1875 Marshal.Copy (buf, managedBuf, 0, bufsz);
1876 stream.Write (managedBuf, 0, bufsz);
1880 public StreamPutBytesDelegate PutBytesDelegate {
1882 if (stream != null && stream.CanWrite) {
1884 spbd = new StreamPutBytesDelegate (StreamPutBytesImpl);
1892 public void StreamCloseImpl ()
1897 public StreamCloseDelegate CloseDelegate {
1899 if (stream != null) {
1901 scd = new StreamCloseDelegate (StreamCloseImpl);
1909 public long StreamSizeImpl ()
1912 return stream.Length;
1918 public StreamSizeDelegate SizeDelegate {
1920 if (stream != null) {
1922 ssd = new StreamSizeDelegate (StreamSizeImpl);
1932 /* Mac only function calls */
1933 [DllImport(GdiPlus)]
1934 internal static extern Status GdipCreateFromContext_macosx (IntPtr cgref, int width, int height, out IntPtr graphics);
1936 /* Linux only function calls*/
1937 [DllImport(GdiPlus)]
1938 internal static extern Status GdipSetVisibleClip_linux (IntPtr graphics, ref Rectangle rect);
1940 [DllImport(GdiPlus)]
1941 internal static extern Status GdipCreateFromXDrawable_linux (IntPtr drawable, IntPtr display, out IntPtr graphics);
1943 // Stream functions for non-Win32 (libgdiplus specific)
1944 [DllImport(GdiPlus)]
1945 static internal extern Status GdipLoadImageFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1946 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1947 StreamCloseDelegate close, StreamSizeDelegate size, out IntPtr image);
1949 [DllImport(GdiPlus)]
1950 static internal extern Status GdipSaveImageToDelegate_linux (IntPtr image, StreamGetBytesDelegate getBytes,
1951 StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close,
1952 StreamSizeDelegate size, ref Guid encoderClsID, IntPtr encoderParameters);
1954 [DllImport(GdiPlus)]
1955 static internal extern Status GdipCreateMetafileFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1956 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1957 StreamCloseDelegate close, StreamSizeDelegate size, out IntPtr metafile);
1959 [DllImport(GdiPlus)]
1960 static internal extern Status GdipGetMetafileHeaderFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1961 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1962 StreamCloseDelegate close, StreamSizeDelegate size, IntPtr header);
1964 [DllImport(GdiPlus)]
1965 static internal extern Status GdipRecordMetafileFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1966 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1967 StreamCloseDelegate close, StreamSizeDelegate size, IntPtr hdc, EmfType type, ref RectangleF frameRect,
1968 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1970 [DllImport(GdiPlus)]
1971 static internal extern Status GdipRecordMetafileFromDelegateI_linux (StreamGetHeaderDelegate getHeader,
1972 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1973 StreamCloseDelegate close, StreamSizeDelegate size, IntPtr hdc, EmfType type, ref Rectangle frameRect,
1974 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1976 [DllImport ("libc")]
1977 static extern int uname (IntPtr buf);