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 [SuppressUnmanagedCodeSecurity]
50 internal static class GDIPlus {
51 public const int FACESIZE = 32;
52 public const int LANG_NEUTRAL = 0;
53 public static IntPtr Display = IntPtr.Zero;
54 public static bool UseX11Drawable = false;
55 public static bool UseCarbonDrawable = false;
56 public static bool UseCocoaDrawable = false;
58 #region gdiplus.dll functions
61 [DllImport("gdiplus.dll")]
62 static internal extern Status GdiplusStartup(ref ulong token, ref GdiplusStartupInput input, ref GdiplusStartupOutput output);
63 [DllImport("gdiplus.dll")]
64 static internal extern void GdiplusShutdown(ref ulong token);
66 internal static ulong GdiPlusToken = 0;
68 static void ProcessExit (object sender, EventArgs e)
70 // Called all pending objects and claim any pending handle before
73 GC.WaitForPendingFinalizers ();
77 // This causes crashes in because this call occurs before all
78 // managed GDI+ objects are finalized. When they are finalized
79 // they call into a shutdown GDI+ and we crash.
80 GdiplusShutdown (ref GdiPlusToken);
82 // This causes crashes in Mono libgdiplus because this call
83 // occurs before all managed GDI objects are finalized
84 // When they are finalized they use the closed display and
86 if (UseX11Drawable && Display != IntPtr.Zero) {
87 XCloseDisplay (Display);
94 int platform = (int) Environment.OSVersion.Platform;
95 if ((platform == 4) || (platform == 6) || (platform == 128)) {
96 if (Environment.GetEnvironmentVariable ("not_supported_MONO_MWF_USE_NEW_X11_BACKEND") != null || Environment.GetEnvironmentVariable ("MONO_MWF_MAC_FORCE_X11") != null) {
97 UseX11Drawable = true;
99 IntPtr buf = Marshal.AllocHGlobal (8192);
100 // This is kind of a hack but gets us sysname from uname (struct utsname *name) on
102 if (uname (buf) != 0) {
103 // WTH: We couldn't detect the OS; lets default to X11
104 UseX11Drawable = true;
106 string os = Marshal.PtrToStringAnsi (buf);
108 UseCarbonDrawable = true;
110 UseX11Drawable = true;
112 Marshal.FreeHGlobal (buf);
116 GdiplusStartupInput input = GdiplusStartupInput.MakeGdiplusStartupInput();
117 GdiplusStartupOutput output = GdiplusStartupOutput.MakeGdiplusStartupOutput();
119 GdiplusStartup (ref GdiPlusToken, ref input, ref output);
121 catch (TypeInitializationException) {
122 Console.Error.WriteLine (
123 "* ERROR: Can not initialize GDI+ library{0}{0}" +
124 "Please check http://www.mono-project.com/Problem:GDIPlusInit for details",
125 Environment.NewLine);
128 // under MS 1.x this event is raised only for the default application domain
129 AppDomain.CurrentDomain.ProcessExit += new EventHandler (ProcessExit);
132 static public bool RunningOnWindows ()
134 return !UseX11Drawable && !UseCarbonDrawable && !UseCocoaDrawable;
137 static public bool RunningOnUnix ()
139 return UseX11Drawable || UseCarbonDrawable || UseCocoaDrawable;
142 // Copies a Ptr to an array of Points and releases the memory
143 static public void FromUnManagedMemoryToPointI (IntPtr prt, Point [] pts)
145 int nPointSize = Marshal.SizeOf (pts[0]);
147 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
148 pts[i] = (Point) Marshal.PtrToStructure (pos, typeof (Point));
150 Marshal.FreeHGlobal (prt);
153 // Copies a Ptr to an array of Points and releases the memory
154 static public void FromUnManagedMemoryToPoint (IntPtr prt, PointF [] pts)
156 int nPointSize = Marshal.SizeOf (pts[0]);
158 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
159 pts[i] = (PointF) Marshal.PtrToStructure (pos, typeof (PointF));
161 Marshal.FreeHGlobal (prt);
164 // Copies an array of Points to unmanaged memory
165 static public IntPtr FromPointToUnManagedMemoryI (Point [] pts)
167 int nPointSize = Marshal.SizeOf (pts[0]);
168 IntPtr dest = Marshal.AllocHGlobal (nPointSize * pts.Length);
170 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
171 Marshal.StructureToPtr (pts[i], pos, false);
176 // Copies a Ptr to an array of v and releases the memory
177 static public void FromUnManagedMemoryToRectangles (IntPtr prt, RectangleF [] pts)
179 int nPointSize = Marshal.SizeOf (pts[0]);
181 for (int i = 0; i < pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
182 pts[i] = (RectangleF) Marshal.PtrToStructure (pos, typeof (RectangleF));
184 Marshal.FreeHGlobal (prt);
187 // Copies an array of Points to unmanaged memory
188 static public IntPtr FromPointToUnManagedMemory (PointF [] pts)
190 int nPointSize = Marshal.SizeOf (pts[0]);
191 IntPtr dest = Marshal.AllocHGlobal (nPointSize * pts.Length);
193 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
194 Marshal.StructureToPtr (pts[i], pos, false);
199 // Converts a status into exception
200 // TODO: Add more status code mappings here
201 static internal void CheckStatus (Status status)
207 case Status.GenericError:
208 msg = Locale.GetText ("Generic Error [GDI+ status: {0}]", status);
209 throw new Exception (msg);
210 case Status.InvalidParameter:
211 msg = Locale.GetText ("A null reference or invalid value was found [GDI+ status: {0}]", status);
212 throw new ArgumentException (msg);
213 case Status.OutOfMemory:
214 msg = Locale.GetText ("Not enough memory to complete operation [GDI+ status: {0}]", status);
215 throw new OutOfMemoryException (msg);
216 case Status.ObjectBusy:
217 msg = Locale.GetText ("Object is busy and cannot state allow this operation [GDI+ status: {0}]", status);
218 throw new MemberAccessException (msg);
219 case Status.InsufficientBuffer:
220 msg = Locale.GetText ("Insufficient buffer provided to complete operation [GDI+ status: {0}]", status);
221 throw new InternalBufferOverflowException (msg);
222 case Status.PropertyNotSupported:
223 msg = Locale.GetText ("Property not supported [GDI+ status: {0}]", status);
224 throw new NotSupportedException (msg);
225 case Status.FileNotFound:
226 msg = Locale.GetText ("Requested file was not found [GDI+ status: {0}]", status);
227 throw new FileNotFoundException (msg);
228 case Status.AccessDenied:
229 msg = Locale.GetText ("Access to resource was denied [GDI+ status: {0}]", status);
230 throw new UnauthorizedAccessException (msg);
231 case Status.UnknownImageFormat:
232 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);
233 throw new NotSupportedException (msg);
234 case Status.NotImplemented:
235 msg = Locale.GetText ("The requested feature is not implemented [GDI+ status: {0}]", status);
236 throw new NotImplementedException (msg);
237 case Status.WrongState:
238 msg = Locale.GetText ("Object is not in a state that can allow this operation [GDI+ status: {0}]", status);
239 throw new ArgumentException (msg);
240 case Status.FontFamilyNotFound:
241 msg = Locale.GetText ("The requested FontFamily could not be found [GDI+ status: {0}]", status);
242 throw new ArgumentException (msg);
243 case Status.ValueOverflow:
244 msg = Locale.GetText ("Argument is out of range [GDI+ status: {0}]", status);
245 throw new OverflowException (msg);
246 case Status.Win32Error:
247 msg = Locale.GetText ("The operation is invalid [GDI+ status: {0}]", status);
248 throw new InvalidOperationException (msg);
250 msg = Locale.GetText ("Unknown Error [GDI+ status: {0}]", status);
251 throw new Exception (msg);
256 [DllImport("gdiplus.dll")]
257 static internal extern IntPtr GdipAlloc (int size);
258 [DllImport("gdiplus.dll")]
259 static internal extern void GdipFree (IntPtr ptr);
263 [DllImport("gdiplus.dll")]
264 static internal extern Status GdipCloneBrush (IntPtr brush, out IntPtr clonedBrush);
265 [DllImport("gdiplus.dll")]
266 static internal extern Status GdipDeleteBrush (IntPtr brush);
267 [DllImport("gdiplus.dll")]
268 static internal extern Status GdipGetBrushType (IntPtr brush, out BrushType type);
272 [DllImport("gdiplus.dll")]
273 static internal extern Status GdipCreateRegion (out IntPtr region);
275 [DllImport("gdiplus.dll")]
276 static internal extern Status GdipCreateRegionRgnData (byte[] data, int size, out IntPtr region);
278 [DllImport("gdiplus.dll")]
279 static internal extern Status GdipDeleteRegion (IntPtr region);
281 [DllImport("gdiplus.dll")]
282 static internal extern Status GdipCloneRegion (IntPtr region, out IntPtr cloned);
284 [DllImport("gdiplus.dll")]
285 static internal extern Status GdipCreateRegionRect (ref RectangleF rect, out IntPtr region);
287 [DllImport("gdiplus.dll")]
288 static internal extern Status GdipCreateRegionRectI (ref Rectangle rect, out IntPtr region);
290 [DllImport("gdiplus.dll")]
291 static internal extern Status GdipCreateRegionPath (IntPtr path, out IntPtr region);
293 [DllImport("gdiplus.dll")]
294 static internal extern Status GdipTranslateRegion (IntPtr region, float dx, float dy);
296 [DllImport("gdiplus.dll")]
297 static internal extern Status GdipTranslateRegionI (IntPtr region, int dx, int dy);
299 [DllImport("gdiplus.dll")]
300 static internal extern Status GdipIsVisibleRegionPoint (IntPtr region, float x, float y,
301 IntPtr graphics, out bool result);
303 [DllImport("gdiplus.dll")]
304 static internal extern Status GdipIsVisibleRegionPointI (IntPtr region, int x, int y,
305 IntPtr graphics, out bool result);
307 [DllImport("gdiplus.dll")]
308 static internal extern Status GdipIsVisibleRegionRect (IntPtr region, float x, float y, float width,
309 float height, IntPtr graphics, out bool result);
311 [DllImport("gdiplus.dll")]
312 static internal extern Status GdipIsVisibleRegionRectI (IntPtr region, int x, int y, int width,
313 int height, IntPtr graphics, out bool result);
316 [DllImport("gdiplus.dll")]
317 static internal extern Status GdipCombineRegionRect (IntPtr region, ref RectangleF rect,
318 CombineMode combineMode);
320 [DllImport("gdiplus.dll")]
321 static internal extern Status GdipCombineRegionRectI (IntPtr region, ref Rectangle rect,
322 CombineMode combineMode);
324 [DllImport("gdiplus.dll")]
325 static internal extern Status GdipCombineRegionPath (IntPtr region, IntPtr path, CombineMode combineMode);
327 [DllImport("gdiplus.dll")]
328 static internal extern Status GdipGetRegionBounds (IntPtr region, IntPtr graphics, ref RectangleF rect);
330 [DllImport("gdiplus.dll")]
331 static internal extern Status GdipSetInfinite (IntPtr region);
333 [DllImport("gdiplus.dll")]
334 static internal extern Status GdipSetEmpty (IntPtr region);
336 [DllImport("gdiplus.dll")]
337 static internal extern Status GdipIsEmptyRegion (IntPtr region, IntPtr graphics, out bool result);
339 [DllImport("gdiplus.dll")]
340 static internal extern Status GdipIsInfiniteRegion (IntPtr region, IntPtr graphics, out bool result);
342 [DllImport("gdiplus.dll")]
343 static internal extern Status GdipCombineRegionRegion (IntPtr region, IntPtr region2,
344 CombineMode combineMode);
346 [DllImport("gdiplus.dll")]
347 static internal extern Status GdipIsEqualRegion (IntPtr region, IntPtr region2,
348 IntPtr graphics, out bool result);
350 [DllImport("gdiplus.dll")]
351 static internal extern Status GdipGetRegionDataSize (IntPtr region, out int bufferSize);
353 [DllImport("gdiplus.dll")]
354 static internal extern Status GdipGetRegionData (IntPtr region, byte[] buffer, int bufferSize,
357 [DllImport("gdiplus.dll")]
358 static internal extern Status GdipGetRegionScansCount (IntPtr region, out int count, IntPtr matrix);
360 [DllImport("gdiplus.dll")]
361 static internal extern Status GdipGetRegionScans (IntPtr region, IntPtr rects, out int count,
364 [DllImport("gdiplus.dll")]
365 static internal extern Status GdipTransformRegion(IntPtr region, IntPtr matrix);
367 [DllImport("gdiplus.dll")]
368 static internal extern Status GdipFillRegion(IntPtr graphics, IntPtr brush, IntPtr region);
370 [DllImport("gdiplus.dll")]
371 static internal extern Status GdipGetRegionHRgn (IntPtr region, IntPtr graphics, ref IntPtr hRgn);
373 [DllImport("gdiplus.dll")]
374 static internal extern Status GdipCreateRegionHrgn (IntPtr hRgn, out IntPtr region);
376 // Solid brush functions
377 [DllImport("gdiplus.dll")]
378 static internal extern Status GdipCreateSolidFill (int color, out IntPtr brush);
379 [DllImport("gdiplus.dll")]
380 static internal extern Status GdipGetSolidFillColor (IntPtr brush, out int color);
381 [DllImport("gdiplus.dll")]
382 static internal extern Status GdipSetSolidFillColor (IntPtr brush, int color);
384 // Hatch Brush functions
385 [DllImport("gdiplus.dll")]
386 static internal extern Status GdipCreateHatchBrush (HatchStyle hatchstyle, int foreColor, int backColor, out IntPtr brush);
387 [DllImport("gdiplus.dll")]
388 static internal extern Status GdipGetHatchStyle (IntPtr brush, out HatchStyle hatchstyle);
389 [DllImport("gdiplus.dll")]
390 static internal extern Status GdipGetHatchForegroundColor (IntPtr brush, out int foreColor);
391 [DllImport("gdiplus.dll")]
392 static internal extern Status GdipGetHatchBackgroundColor (IntPtr brush, out int backColor);
394 // Texture brush functions
395 [DllImport("gdiplus.dll")]
396 static internal extern Status GdipGetTextureImage (IntPtr texture, out IntPtr image);
397 [DllImport("gdiplus.dll")]
398 static internal extern Status GdipCreateTexture (IntPtr image, WrapMode wrapMode, out IntPtr texture);
399 [DllImport("gdiplus.dll")]
400 static internal extern Status GdipCreateTextureIAI (IntPtr image, IntPtr imageAttributes, int x, int y, int width, int height, out IntPtr texture);
401 [DllImport("gdiplus.dll")]
402 static internal extern Status GdipCreateTextureIA (IntPtr image, IntPtr imageAttributes, float x, float y, float width, float height, out IntPtr texture);
403 [DllImport("gdiplus.dll")]
404 static internal extern Status GdipCreateTexture2I (IntPtr image, WrapMode wrapMode, int x, int y, int width, int height, out IntPtr texture);
405 [DllImport("gdiplus.dll")]
406 static internal extern Status GdipCreateTexture2 (IntPtr image, WrapMode wrapMode, float x, float y, float width, float height, out IntPtr texture);
407 [DllImport("gdiplus.dll")]
408 static internal extern Status GdipGetTextureTransform (IntPtr texture, IntPtr matrix);
409 [DllImport("gdiplus.dll")]
410 static internal extern Status GdipSetTextureTransform (IntPtr texture, IntPtr matrix);
411 [DllImport("gdiplus.dll")]
412 static internal extern Status GdipGetTextureWrapMode (IntPtr texture, out WrapMode wrapMode);
413 [DllImport("gdiplus.dll")]
414 static internal extern Status GdipSetTextureWrapMode (IntPtr texture, WrapMode wrapMode);
415 [DllImport("gdiplus.dll")]
416 static internal extern Status GdipMultiplyTextureTransform (IntPtr texture, IntPtr matrix, MatrixOrder order);
417 [DllImport("gdiplus.dll")]
418 static internal extern Status GdipResetTextureTransform (IntPtr texture);
419 [DllImport("gdiplus.dll")]
420 static internal extern Status GdipRotateTextureTransform (IntPtr texture, float angle, MatrixOrder order);
421 [DllImport("gdiplus.dll")]
422 static internal extern Status GdipScaleTextureTransform (IntPtr texture, float sx, float sy, MatrixOrder order);
423 [DllImport("gdiplus.dll")]
424 static internal extern Status GdipTranslateTextureTransform (IntPtr texture, float dx, float dy, MatrixOrder order);
426 // PathGradientBrush functions
427 [DllImport("gdiplus.dll")]
428 static internal extern Status GdipCreatePathGradientFromPath (IntPtr path, out IntPtr brush);
429 [DllImport("gdiplus.dll")]
430 static internal extern Status GdipCreatePathGradientI (Point [] points, int count, WrapMode wrapMode, out IntPtr brush);
431 [DllImport("gdiplus.dll")]
432 static internal extern Status GdipCreatePathGradient (PointF [] points, int count, WrapMode wrapMode, out IntPtr brush);
433 [DllImport("gdiplus.dll")]
434 static internal extern Status GdipGetPathGradientBlendCount (IntPtr brush, out int count);
435 [DllImport("gdiplus.dll")]
436 static internal extern Status GdipGetPathGradientBlend (IntPtr brush, float [] blend, float [] positions, int count);
437 [DllImport("gdiplus.dll")]
438 static internal extern Status GdipSetPathGradientBlend (IntPtr brush, float [] blend, float [] positions, int count);
439 [DllImport("gdiplus.dll")]
440 static internal extern Status GdipGetPathGradientCenterColor (IntPtr brush, out int color);
441 [DllImport("gdiplus.dll")]
442 static internal extern Status GdipSetPathGradientCenterColor (IntPtr brush, int color);
443 [DllImport("gdiplus.dll")]
444 static internal extern Status GdipGetPathGradientCenterPoint (IntPtr brush, out PointF point);
445 [DllImport("gdiplus.dll")]
446 static internal extern Status GdipSetPathGradientCenterPoint (IntPtr brush, ref PointF point);
447 [DllImport("gdiplus.dll")]
448 static internal extern Status GdipGetPathGradientFocusScales (IntPtr brush, out float xScale, out float yScale);
449 [DllImport("gdiplus.dll")]
450 static internal extern Status GdipSetPathGradientFocusScales (IntPtr brush, float xScale, float yScale);
451 [DllImport("gdiplus.dll")]
452 static internal extern Status GdipGetPathGradientPresetBlendCount (IntPtr brush, out int count);
453 [DllImport("gdiplus.dll")]
454 static internal extern Status GdipGetPathGradientPresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
455 [DllImport("gdiplus.dll")]
456 static internal extern Status GdipSetPathGradientPresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
457 [DllImport("gdiplus.dll")]
458 static internal extern Status GdipGetPathGradientRect (IntPtr brush, out RectangleF rect);
459 [DllImport("gdiplus.dll")]
460 static internal extern Status GdipGetPathGradientSurroundColorCount (IntPtr brush, out int count);
461 [DllImport("gdiplus.dll")]
462 static internal extern Status GdipGetPathGradientSurroundColorsWithCount (IntPtr brush, int [] color, ref int count);
463 [DllImport("gdiplus.dll")]
464 static internal extern Status GdipSetPathGradientSurroundColorsWithCount (IntPtr brush, int [] color, ref int count);
465 [DllImport("gdiplus.dll")]
466 static internal extern Status GdipGetPathGradientTransform (IntPtr brush, IntPtr matrix);
467 [DllImport("gdiplus.dll")]
468 static internal extern Status GdipSetPathGradientTransform (IntPtr brush, IntPtr matrix);
469 [DllImport("gdiplus.dll")]
470 static internal extern Status GdipGetPathGradientWrapMode (IntPtr brush, out WrapMode wrapMode);
471 [DllImport("gdiplus.dll")]
472 static internal extern Status GdipSetPathGradientWrapMode (IntPtr brush, WrapMode wrapMode);
473 [DllImport("gdiplus.dll")]
474 static internal extern Status GdipSetPathGradientLinearBlend (IntPtr brush, float focus, float scale);
475 [DllImport("gdiplus.dll")]
476 static internal extern Status GdipSetPathGradientSigmaBlend (IntPtr brush, float focus, float scale);
477 [DllImport("gdiplus.dll")]
478 static internal extern Status GdipMultiplyPathGradientTransform (IntPtr texture, IntPtr matrix, MatrixOrder order);
479 [DllImport("gdiplus.dll")]
480 static internal extern Status GdipResetPathGradientTransform (IntPtr brush);
481 [DllImport("gdiplus.dll")]
482 static internal extern Status GdipRotatePathGradientTransform (IntPtr brush, float angle, MatrixOrder order);
483 [DllImport("gdiplus.dll")]
484 static internal extern Status GdipScalePathGradientTransform (IntPtr brush, float sx, float sy, MatrixOrder order);
485 [DllImport("gdiplus.dll")]
486 static internal extern Status GdipTranslatePathGradientTransform (IntPtr brush, float dx, float dy, MatrixOrder order);
488 // LinearGradientBrush functions
489 [DllImport("gdiplus.dll")]
490 static internal extern Status GdipCreateLineBrushI (ref Point point1, ref Point point2, int color1, int color2, WrapMode wrapMode, out IntPtr brush);
491 [DllImport("gdiplus.dll")]
492 static internal extern Status GdipCreateLineBrush (ref PointF point1, ref PointF point2, int color1, int color2, WrapMode wrapMode, out IntPtr brush);
493 [DllImport("gdiplus.dll")]
494 static internal extern Status GdipCreateLineBrushFromRectI (ref Rectangle rect, int color1, int color2, LinearGradientMode linearGradientMode, WrapMode wrapMode, out IntPtr brush);
495 [DllImport("gdiplus.dll")]
496 static internal extern Status GdipCreateLineBrushFromRect (ref RectangleF rect, int color1, int color2, LinearGradientMode linearGradientMode, WrapMode wrapMode, out IntPtr brush);
497 [DllImport("gdiplus.dll")]
498 static internal extern Status GdipCreateLineBrushFromRectWithAngleI (ref Rectangle rect, int color1, int color2, float angle, bool isAngleScaleable, WrapMode wrapMode, out IntPtr brush);
499 [DllImport("gdiplus.dll")]
500 static internal extern Status GdipCreateLineBrushFromRectWithAngle (ref RectangleF rect, int color1, int color2, float angle, bool isAngleScaleable, WrapMode wrapMode, out IntPtr brush);
501 [DllImport("gdiplus.dll")]
502 static internal extern Status GdipGetLineBlendCount (IntPtr brush, out int count);
503 [DllImport("gdiplus.dll")]
504 static internal extern Status GdipSetLineBlend (IntPtr brush, float [] blend, float [] positions, int count);
505 [DllImport("gdiplus.dll")]
506 static internal extern Status GdipGetLineBlend (IntPtr brush, float [] blend, float [] positions, int count);
507 [DllImport("gdiplus.dll")]
508 static internal extern Status GdipSetLineGammaCorrection (IntPtr brush, bool useGammaCorrection);
509 [DllImport("gdiplus.dll")]
510 static internal extern Status GdipGetLineGammaCorrection (IntPtr brush, out bool useGammaCorrection);
511 [DllImport("gdiplus.dll")]
512 static internal extern Status GdipGetLinePresetBlendCount (IntPtr brush, out int count);
513 [DllImport("gdiplus.dll")]
514 static internal extern Status GdipSetLinePresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
515 [DllImport("gdiplus.dll")]
516 static internal extern Status GdipGetLinePresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
517 [DllImport("gdiplus.dll")]
518 static internal extern Status GdipSetLineColors (IntPtr brush, int color1, int color2);
519 [DllImport("gdiplus.dll")]
520 static internal extern Status GdipGetLineColors (IntPtr brush, int [] colors);
521 [DllImport("gdiplus.dll")]
522 static internal extern Status GdipGetLineRectI (IntPtr brush, out Rectangle rect);
523 [DllImport("gdiplus.dll")]
524 static internal extern Status GdipGetLineRect (IntPtr brush, out RectangleF rect);
525 [DllImport("gdiplus.dll")]
526 static internal extern Status GdipSetLineTransform (IntPtr brush, IntPtr matrix);
527 [DllImport("gdiplus.dll")]
528 static internal extern Status GdipGetLineTransform (IntPtr brush, IntPtr matrix);
529 [DllImport("gdiplus.dll")]
530 static internal extern Status GdipSetLineWrapMode (IntPtr brush, WrapMode wrapMode);
531 [DllImport("gdiplus.dll")]
532 static internal extern Status GdipGetLineWrapMode (IntPtr brush, out WrapMode wrapMode);
533 [DllImport("gdiplus.dll")]
534 static internal extern Status GdipSetLineLinearBlend (IntPtr brush, float focus, float scale);
535 [DllImport("gdiplus.dll")]
536 static internal extern Status GdipSetLineSigmaBlend (IntPtr brush, float focus, float scale);
537 [DllImport("gdiplus.dll")]
538 static internal extern Status GdipMultiplyLineTransform (IntPtr brush, IntPtr matrix, MatrixOrder order);
539 [DllImport("gdiplus.dll")]
540 static internal extern Status GdipResetLineTransform (IntPtr brush);
541 [DllImport("gdiplus.dll")]
542 static internal extern Status GdipRotateLineTransform (IntPtr brush, float angle, MatrixOrder order);
543 [DllImport("gdiplus.dll")]
544 static internal extern Status GdipScaleLineTransform (IntPtr brush, float sx, float sy, MatrixOrder order);
545 [DllImport("gdiplus.dll")]
546 static internal extern Status GdipTranslateLineTransform (IntPtr brush, float dx, float dy, MatrixOrder order);
548 // Graphics functions
549 [DllImport("gdiplus.dll")]
550 static internal extern Status GdipCreateFromHDC(IntPtr hDC, out IntPtr graphics);
551 [DllImport("gdiplus.dll")]
552 static internal extern Status GdipDeleteGraphics(IntPtr graphics);
553 [DllImport("gdiplus.dll")]
554 static internal extern Status GdipRestoreGraphics(IntPtr graphics, uint graphicsState);
555 [DllImport("gdiplus.dll")]
556 static internal extern Status GdipSaveGraphics(IntPtr graphics, out uint state);
557 [DllImport("gdiplus.dll")]
558 static internal extern Status GdipMultiplyWorldTransform (IntPtr graphics, IntPtr matrix, MatrixOrder order);
560 [DllImport("gdiplus.dll")]
561 static internal extern Status GdipRotateWorldTransform(IntPtr graphics, float angle, MatrixOrder order);
562 [DllImport("gdiplus.dll")]
563 static internal extern Status GdipTranslateWorldTransform(IntPtr graphics, float dx, float dy, MatrixOrder order);
564 [DllImport("gdiplus.dll")]
565 static internal extern Status GdipDrawArc (IntPtr graphics, IntPtr pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
566 [DllImport("gdiplus.dll")]
567 static internal extern Status GdipDrawArcI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height, float startAngle, float sweepAngle);
568 [DllImport("gdiplus.dll")]
569 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);
570 [DllImport("gdiplus.dll")]
571 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);
572 [DllImport("gdiplus.dll")]
573 static internal extern Status GdipDrawEllipseI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
574 [DllImport("gdiplus.dll")]
575 static internal extern Status GdipDrawEllipse (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
576 [DllImport("gdiplus.dll")]
577 static internal extern Status GdipDrawLine (IntPtr graphics, IntPtr pen, float x1, float y1, float x2, float y2);
578 [DllImport("gdiplus.dll")]
579 static internal extern Status GdipDrawLineI (IntPtr graphics, IntPtr pen, int x1, int y1, int x2, int y2);
580 [DllImport ("gdiplus.dll")]
581 static internal extern Status GdipDrawLines (IntPtr graphics, IntPtr pen, PointF [] points, int count);
582 [DllImport ("gdiplus.dll")]
583 static internal extern Status GdipDrawLinesI (IntPtr graphics, IntPtr pen, Point [] points, int count);
584 [DllImport ("gdiplus.dll")]
585 static internal extern Status GdipDrawPath (IntPtr graphics, IntPtr pen, IntPtr path);
586 [DllImport ("gdiplus.dll")]
587 static internal extern Status GdipDrawPie (IntPtr graphics, IntPtr pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
588 [DllImport ("gdiplus.dll")]
589 static internal extern Status GdipDrawPieI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height, float startAngle, float sweepAngle);
590 [DllImport ("gdiplus.dll")]
591 static internal extern Status GdipDrawPolygon (IntPtr graphics, IntPtr pen, PointF [] points, int count);
592 [DllImport ("gdiplus.dll")]
593 static internal extern Status GdipDrawPolygonI (IntPtr graphics, IntPtr pen, Point [] points, int count);
594 [DllImport ("gdiplus.dll")]
595 static internal extern Status GdipDrawRectangle (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
596 [DllImport ("gdiplus.dll")]
597 static internal extern Status GdipDrawRectangleI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
598 [DllImport ("gdiplus.dll")]
599 static internal extern Status GdipDrawRectangles (IntPtr graphics, IntPtr pen, RectangleF [] rects, int count);
600 [DllImport ("gdiplus.dll")]
601 static internal extern Status GdipDrawRectanglesI (IntPtr graphics, IntPtr pen, Rectangle [] rects, int count);
602 [DllImport("gdiplus.dll")]
603 static internal extern Status GdipFillEllipseI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
604 [DllImport("gdiplus.dll")]
605 static internal extern Status GdipFillEllipse (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
606 [DllImport ("gdiplus.dll")]
607 static internal extern Status GdipFillPolygon (IntPtr graphics, IntPtr brush, PointF [] points, int count, FillMode fillMode);
608 [DllImport ("gdiplus.dll")]
609 static internal extern Status GdipFillPolygonI (IntPtr graphics, IntPtr brush, Point [] points, int count, FillMode fillMode);
610 [DllImport ("gdiplus.dll")]
611 static internal extern Status GdipFillPolygon2 (IntPtr graphics, IntPtr brush, PointF [] points, int count);
612 [DllImport ("gdiplus.dll")]
613 static internal extern Status GdipFillPolygon2I (IntPtr graphics, IntPtr brush, Point [] points, int count);
614 [DllImport("gdiplus.dll")]
615 static internal extern Status GdipFillRectangle (IntPtr graphics, IntPtr brush, float x1, float y1, float x2, float y2);
616 [DllImport("gdiplus.dll")]
617 static internal extern Status GdipFillRectangleI (IntPtr graphics, IntPtr brush, int x1, int y1, int x2, int y2);
618 [DllImport("gdiplus.dll")]
619 static internal extern Status GdipFillRectangles (IntPtr graphics, IntPtr brush, RectangleF [] rects, int count);
620 [DllImport("gdiplus.dll")]
621 static internal extern Status GdipFillRectanglesI (IntPtr graphics, IntPtr brush, Rectangle [] rects, int count);
622 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
623 static internal extern Status GdipDrawString (IntPtr graphics, string text, int len, IntPtr font, ref RectangleF rc, IntPtr format, IntPtr brush);
624 [DllImport("gdiplus.dll")]
625 static internal extern Status GdipGetDC (IntPtr graphics, out IntPtr hdc);
626 [DllImport("gdiplus.dll")]
627 static internal extern Status GdipReleaseDC (IntPtr graphics, IntPtr hdc);
628 [DllImport("gdiplus.dll")]
629 static internal extern Status GdipDrawImageRectI (IntPtr graphics, IntPtr image, int x, int y, int width, int height);
630 [DllImport ("gdiplus.dll")]
631 static internal extern Status GdipGetRenderingOrigin (IntPtr graphics, out int x, out int y);
632 [DllImport ("gdiplus.dll")]
633 static internal extern Status GdipSetRenderingOrigin (IntPtr graphics, int x, int y);
634 [DllImport("gdiplus.dll")]
635 internal static extern Status GdipCloneBitmapArea (float x, float y, float width, float height, PixelFormat format, IntPtr original, out IntPtr bitmap);
636 [DllImport("gdiplus.dll")]
637 internal static extern Status GdipCloneBitmapAreaI (int x, int y, int width, int height, PixelFormat format, IntPtr original, out IntPtr bitmap);
638 [DllImport("gdiplus.dll")]
639 internal static extern Status GdipResetWorldTransform (IntPtr graphics);
640 [DllImport("gdiplus.dll")]
641 internal static extern Status GdipSetWorldTransform (IntPtr graphics, IntPtr matrix);
642 [DllImport("gdiplus.dll")]
643 internal static extern Status GdipGetWorldTransform (IntPtr graphics, IntPtr matrix);
644 [DllImport("gdiplus.dll")]
645 internal static extern Status GdipScaleWorldTransform (IntPtr graphics, float sx, float sy, MatrixOrder order);
646 [DllImport("gdiplus.dll")]
647 internal static extern Status GdipGraphicsClear(IntPtr graphics, int argb);
648 [DllImport("gdiplus.dll")]
649 internal static extern Status GdipDrawClosedCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
650 [DllImport("gdiplus.dll")]
651 internal static extern Status GdipDrawClosedCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
652 [DllImport("gdiplus.dll")]
653 internal static extern Status GdipDrawClosedCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
654 [DllImport("gdiplus.dll")]
655 internal static extern Status GdipDrawClosedCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
656 [DllImport("gdiplus.dll")]
657 internal static extern Status GdipDrawCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
658 [DllImport("gdiplus.dll")]
659 internal static extern Status GdipDrawCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
660 [DllImport("gdiplus.dll")]
661 internal static extern Status GdipDrawCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
662 [DllImport("gdiplus.dll")]
663 internal static extern Status GdipDrawCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
664 [DllImport("gdiplus.dll")]
665 internal static extern Status GdipDrawCurve3(IntPtr graphics, IntPtr pen, PointF [] points, int count, int offset, int numberOfSegments, float tension);
666 [DllImport("gdiplus.dll")]
667 internal static extern Status GdipDrawCurve3I(IntPtr graphics, IntPtr pen, Point [] points, int count, int offset, int numberOfSegments, float tension);
668 [DllImport("gdiplus.dll")]
669 internal static extern Status GdipSetClipRect(IntPtr graphics, float x, float y, float width, float height, CombineMode combineMode);
670 [DllImport("gdiplus.dll")]
671 internal static extern Status GdipSetClipRectI(IntPtr graphics, int x, int y, int width, int height, CombineMode combineMode);
672 [DllImport("gdiplus.dll")]
673 internal static extern Status GdipSetClipPath(IntPtr graphics, IntPtr path, CombineMode combineMode);
674 [DllImport("gdiplus.dll")]
675 internal static extern Status GdipSetClipRegion(IntPtr graphics, IntPtr region, CombineMode combineMode);
676 [DllImport("gdiplus.dll")]
677 internal static extern Status GdipSetClipGraphics(IntPtr graphics, IntPtr srcgraphics, CombineMode combineMode);
678 [DllImport("gdiplus.dll")]
679 internal static extern Status GdipResetClip(IntPtr graphics);
680 [DllImport("gdiplus.dll")]
681 internal static extern Status GdipEndContainer(IntPtr graphics, uint state);
682 [DllImport("gdiplus.dll")]
683 internal static extern Status GdipGetClip (IntPtr graphics, IntPtr region);
685 [DllImport("gdiplus.dll")]
686 internal static extern Status GdipFillClosedCurve(IntPtr graphics, IntPtr brush, PointF [] points, int count);
688 [DllImport("gdiplus.dll")]
689 internal static extern Status GdipFillClosedCurveI(IntPtr graphics, IntPtr brush, Point [] points, int count);
691 [DllImport("gdiplus.dll")]
692 internal static extern Status GdipFillClosedCurve2(IntPtr graphics, IntPtr brush,
693 PointF [] points, int count, float tension, FillMode fillMode);
695 [DllImport("gdiplus.dll")]
696 internal static extern Status GdipFillClosedCurve2I(IntPtr graphics, IntPtr brush,
697 Point [] points, int count, float tension, FillMode fillMode);
699 [DllImport("gdiplus.dll")]
700 internal static extern Status GdipFillPie(IntPtr graphics, IntPtr brush, float x, float y,
701 float width, float height, float startAngle, float sweepAngle);
703 [DllImport("gdiplus.dll")]
704 internal static extern Status GdipFillPieI(IntPtr graphics, IntPtr brush, int x, int y,
705 int width, int height, float startAngle, float sweepAngle);
707 [DllImport("gdiplus.dll")]
708 internal static extern Status GdipFillPath(IntPtr graphics, IntPtr brush, IntPtr path);
710 [DllImport("gdiplus.dll")]
711 internal static extern Status GdipGetNearestColor(IntPtr graphics, out int argb);
713 [DllImport("gdiplus.dll")]
714 internal static extern Status GdipIsVisiblePoint(IntPtr graphics, float x, float y, out bool result);
716 [DllImport("gdiplus.dll")]
717 internal static extern Status GdipIsVisiblePointI(IntPtr graphics, int x, int y, out bool result);
719 [DllImport("gdiplus.dll")]
720 internal static extern Status GdipIsVisibleRect(IntPtr graphics, float x, float y,
721 float width, float height, out bool result);
723 [DllImport("gdiplus.dll")]
724 internal static extern Status GdipIsVisibleRectI(IntPtr graphics, int x, int y,
725 int width, int height, out bool result);
727 [DllImport("gdiplus.dll")]
728 internal static extern Status GdipTransformPoints(IntPtr graphics, CoordinateSpace destSpace,
729 CoordinateSpace srcSpace, IntPtr points, int count);
731 [DllImport("gdiplus.dll")]
732 internal static extern Status GdipTransformPointsI(IntPtr graphics, CoordinateSpace destSpace,
733 CoordinateSpace srcSpace, IntPtr points, int count);
735 [DllImport("gdiplus.dll")]
736 internal static extern Status GdipTranslateClip(IntPtr graphics, float dx, float dy);
737 [DllImport("gdiplus.dll")]
738 internal static extern Status GdipTranslateClipI(IntPtr graphics, int dx, int dy);
739 [DllImport("gdiplus.dll")]
740 internal static extern Status GdipGetClipBounds(IntPtr graphics, out RectangleF rect);
741 [DllImport("gdiplus.dll")]
742 internal static extern Status GdipSetCompositingMode(IntPtr graphics, CompositingMode compositingMode);
743 [DllImport("gdiplus.dll")]
744 internal static extern Status GdipGetCompositingMode(IntPtr graphics, out CompositingMode compositingMode);
745 [DllImport("gdiplus.dll")]
746 internal static extern Status GdipSetCompositingQuality(IntPtr graphics, CompositingQuality compositingQuality);
747 [DllImport("gdiplus.dll")]
748 internal static extern Status GdipGetCompositingQuality(IntPtr graphics, out CompositingQuality compositingQuality);
749 [DllImport("gdiplus.dll")]
750 internal static extern Status GdipSetInterpolationMode(IntPtr graphics, InterpolationMode interpolationMode);
751 [DllImport("gdiplus.dll")]
752 internal static extern Status GdipGetInterpolationMode(IntPtr graphics, out InterpolationMode interpolationMode);
753 [DllImport("gdiplus.dll")]
754 internal static extern Status GdipGetDpiX(IntPtr graphics, out float dpi);
755 [DllImport("gdiplus.dll")]
756 internal static extern Status GdipGetDpiY(IntPtr graphics, out float dpi);
757 [DllImport("gdiplus.dll")]
758 internal static extern Status GdipIsClipEmpty(IntPtr graphics, out bool result);
759 [DllImport("gdiplus.dll")]
760 internal static extern Status GdipIsVisibleClipEmpty(IntPtr graphics, out bool result);
761 [DllImport("gdiplus.dll")]
762 internal static extern Status GdipGetPageUnit(IntPtr graphics, out GraphicsUnit unit);
763 [DllImport("gdiplus.dll")]
764 internal static extern Status GdipGetPageScale(IntPtr graphics, out float scale);
765 [DllImport("gdiplus.dll")]
766 internal static extern Status GdipSetPageUnit(IntPtr graphics, GraphicsUnit unit);
767 [DllImport("gdiplus.dll")]
768 internal static extern Status GdipSetPageScale(IntPtr graphics, float scale);
769 [DllImport("gdiplus.dll")]
770 internal static extern Status GdipSetPixelOffsetMode(IntPtr graphics, PixelOffsetMode pixelOffsetMode);
771 [DllImport("gdiplus.dll")]
772 internal static extern Status GdipGetPixelOffsetMode(IntPtr graphics, out PixelOffsetMode pixelOffsetMode);
773 [DllImport("gdiplus.dll")]
774 internal static extern Status GdipSetSmoothingMode(IntPtr graphics, SmoothingMode smoothingMode);
775 [DllImport("gdiplus.dll")]
776 internal static extern Status GdipGetSmoothingMode(IntPtr graphics, out SmoothingMode smoothingMode);
777 [DllImport("gdiplus.dll")]
778 internal static extern Status GdipSetTextContrast(IntPtr graphics, int contrast);
779 [DllImport("gdiplus.dll")]
780 internal static extern Status GdipGetTextContrast(IntPtr graphics, out int contrast);
781 [DllImport("gdiplus.dll")]
782 internal static extern Status GdipSetTextRenderingHint(IntPtr graphics, TextRenderingHint mode);
783 [DllImport("gdiplus.dll")]
784 internal static extern Status GdipGetTextRenderingHint(IntPtr graphics, out TextRenderingHint mode);
785 [DllImport("gdiplus.dll")]
786 internal static extern Status GdipGetVisibleClipBounds(IntPtr graphics, out RectangleF rect);
788 [DllImport("gdiplus.dll")]
789 internal static extern Status GdipFlush(IntPtr graphics, FlushIntention intention);
791 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
792 internal static extern Status GdipAddPathString (IntPtr path, string s, int lenght, IntPtr family, int style, float emSize, ref RectangleF layoutRect, IntPtr format);
793 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
794 internal static extern Status GdipAddPathStringI (IntPtr path, string s, int lenght, IntPtr family, int style, float emSize, ref Rectangle layoutRect, IntPtr format);
798 [DllImport("gdiplus.dll")]
799 internal static extern Status GdipCreatePen1 (int argb, float width, GraphicsUnit unit, out IntPtr pen);
800 [DllImport("gdiplus.dll")]
801 internal static extern Status GdipCreatePen2 (IntPtr brush, float width, GraphicsUnit unit, out IntPtr pen);
802 [DllImport("gdiplus.dll")]
803 internal static extern Status GdipClonePen (IntPtr pen, out IntPtr clonepen);
804 [DllImport("gdiplus.dll")]
805 internal static extern Status GdipDeletePen(IntPtr pen);
806 [DllImport("gdiplus.dll")]
807 internal static extern Status GdipSetPenBrushFill (IntPtr pen, IntPtr brush);
808 [DllImport("gdiplus.dll")]
809 internal static extern Status GdipGetPenBrushFill (IntPtr pen, out IntPtr brush);
810 [DllImport("gdiplus.dll")]
811 internal static extern Status GdipGetPenFillType (IntPtr pen, out PenType type);
812 [DllImport("gdiplus.dll")]
813 internal static extern Status GdipSetPenColor (IntPtr pen, int color);
814 [DllImport("gdiplus.dll")]
815 internal static extern Status GdipGetPenColor (IntPtr pen, out int color);
816 [DllImport("gdiplus.dll")]
817 internal static extern Status GdipSetPenCompoundArray (IntPtr pen, float[] dash, int count);
818 [DllImport("gdiplus.dll")]
819 internal static extern Status GdipGetPenCompoundArray (IntPtr pen, float[] dash, int count);
820 [DllImport("gdiplus.dll")]
821 internal static extern Status GdipGetPenCompoundCount (IntPtr pen, out int count);
822 [DllImport("gdiplus.dll")]
823 internal static extern Status GdipSetPenDashCap197819 (IntPtr pen, DashCap dashCap);
824 [DllImport("gdiplus.dll")]
825 internal static extern Status GdipGetPenDashCap197819 (IntPtr pen, out DashCap dashCap);
826 [DllImport("gdiplus.dll")]
827 internal static extern Status GdipSetPenDashStyle (IntPtr pen, DashStyle dashStyle);
828 [DllImport("gdiplus.dll")]
829 internal static extern Status GdipGetPenDashStyle (IntPtr pen, out DashStyle dashStyle);
830 [DllImport("gdiplus.dll")]
831 internal static extern Status GdipSetPenDashOffset (IntPtr pen, float offset);
832 [DllImport("gdiplus.dll")]
833 internal static extern Status GdipGetPenDashOffset (IntPtr pen, out float offset);
834 [DllImport("gdiplus.dll")]
835 internal static extern Status GdipGetPenDashCount (IntPtr pen, out int count);
836 [DllImport("gdiplus.dll")]
837 internal static extern Status GdipSetPenDashArray (IntPtr pen, float[] dash, int count);
838 [DllImport("gdiplus.dll")]
839 internal static extern Status GdipGetPenDashArray (IntPtr pen, float[] dash, int count);
840 [DllImport("gdiplus.dll")]
841 internal static extern Status GdipSetPenMiterLimit (IntPtr pen, float miterLimit);
842 [DllImport("gdiplus.dll")]
843 internal static extern Status GdipGetPenMiterLimit (IntPtr pen, out float miterLimit);
844 [DllImport("gdiplus.dll")]
845 internal static extern Status GdipSetPenLineJoin (IntPtr pen, LineJoin lineJoin);
846 [DllImport("gdiplus.dll")]
847 internal static extern Status GdipGetPenLineJoin (IntPtr pen, out LineJoin lineJoin);
848 [DllImport("gdiplus.dll")]
849 internal static extern Status GdipSetPenLineCap197819 (IntPtr pen, LineCap startCap, LineCap endCap, DashCap dashCap);
850 [DllImport("gdiplus.dll")]
851 internal static extern Status GdipSetPenMode (IntPtr pen, PenAlignment alignment);
852 [DllImport("gdiplus.dll")]
853 internal static extern Status GdipGetPenMode (IntPtr pen, out PenAlignment alignment);
854 [DllImport("gdiplus.dll")]
855 internal static extern Status GdipSetPenStartCap (IntPtr pen, LineCap startCap);
856 [DllImport("gdiplus.dll")]
857 internal static extern Status GdipGetPenStartCap (IntPtr pen, out LineCap startCap);
858 [DllImport("gdiplus.dll")]
859 internal static extern Status GdipSetPenEndCap (IntPtr pen, LineCap endCap);
860 [DllImport("gdiplus.dll")]
861 internal static extern Status GdipGetPenEndCap (IntPtr pen, out LineCap endCap);
862 [DllImport("gdiplus.dll")]
863 internal static extern Status GdipSetPenCustomStartCap (IntPtr pen, IntPtr customCap);
864 [DllImport("gdiplus.dll")]
865 internal static extern Status GdipGetPenCustomStartCap (IntPtr pen, out IntPtr customCap);
866 [DllImport("gdiplus.dll")]
867 internal static extern Status GdipSetPenCustomEndCap (IntPtr pen, IntPtr customCap);
868 [DllImport("gdiplus.dll")]
869 internal static extern Status GdipGetPenCustomEndCap (IntPtr pen, out IntPtr customCap);
870 [DllImport("gdiplus.dll")]
871 internal static extern Status GdipSetPenTransform (IntPtr pen, IntPtr matrix);
872 [DllImport("gdiplus.dll")]
873 internal static extern Status GdipGetPenTransform (IntPtr pen, IntPtr matrix);
874 [DllImport("gdiplus.dll")]
875 internal static extern Status GdipSetPenWidth (IntPtr pen, float width);
876 [DllImport("gdiplus.dll")]
877 internal static extern Status GdipGetPenWidth (IntPtr pen, out float width);
878 [DllImport("gdiplus.dll")]
879 internal static extern Status GdipResetPenTransform (IntPtr pen);
880 [DllImport("gdiplus.dll")]
881 internal static extern Status GdipMultiplyPenTransform (IntPtr pen, IntPtr matrix, MatrixOrder order);
882 [DllImport("gdiplus.dll")]
883 internal static extern Status GdipRotatePenTransform (IntPtr pen, float angle, MatrixOrder order);
884 [DllImport("gdiplus.dll")]
885 internal static extern Status GdipScalePenTransform (IntPtr pen, float sx, float sy, MatrixOrder order);
886 [DllImport("gdiplus.dll")]
887 internal static extern Status GdipTranslatePenTransform (IntPtr pen, float dx, float dy, MatrixOrder order);
889 // CustomLineCap functions
890 [DllImport("gdiplus.dll")]
891 internal static extern Status GdipCreateCustomLineCap (IntPtr fillPath, IntPtr strokePath, LineCap baseCap, float baseInset, out IntPtr customCap);
892 [DllImport("gdiplus.dll")]
893 internal static extern Status GdipDeleteCustomLineCap (IntPtr customCap);
894 [DllImport("gdiplus.dll")]
895 internal static extern Status GdipCloneCustomLineCap (IntPtr customCap, out IntPtr clonedCap);
896 [DllImport("gdiplus.dll")]
897 internal static extern Status GdipSetCustomLineCapStrokeCaps (IntPtr customCap, LineCap startCap, LineCap endCap);
898 [DllImport("gdiplus.dll")]
899 internal static extern Status GdipGetCustomLineCapStrokeCaps (IntPtr customCap, out LineCap startCap, out LineCap endCap);
900 [DllImport("gdiplus.dll")]
901 internal static extern Status GdipSetCustomLineCapStrokeJoin (IntPtr customCap, LineJoin lineJoin);
902 [DllImport("gdiplus.dll")]
903 internal static extern Status GdipGetCustomLineCapStrokeJoin (IntPtr customCap, out LineJoin lineJoin);
904 [DllImport("gdiplus.dll")]
905 internal static extern Status GdipSetCustomLineCapBaseCap (IntPtr customCap, LineCap baseCap);
906 [DllImport("gdiplus.dll")]
907 internal static extern Status GdipGetCustomLineCapBaseCap (IntPtr customCap, out LineCap baseCap);
908 [DllImport("gdiplus.dll")]
909 internal static extern Status GdipSetCustomLineCapBaseInset (IntPtr customCap, float inset);
910 [DllImport("gdiplus.dll")]
911 internal static extern Status GdipGetCustomLineCapBaseInset (IntPtr customCap, out float inset);
912 [DllImport("gdiplus.dll")]
913 internal static extern Status GdipSetCustomLineCapWidthScale (IntPtr customCap, float widthScale);
914 [DllImport("gdiplus.dll")]
915 internal static extern Status GdipGetCustomLineCapWidthScale (IntPtr customCap, out float widthScale);
917 // AdjustableArrowCap functions
918 [DllImport("gdiplus.dll")]
919 internal static extern Status GdipCreateAdjustableArrowCap (float height, float width, bool isFilled, out IntPtr arrowCap);
920 [DllImport("gdiplus.dll")]
921 internal static extern Status GdipSetAdjustableArrowCapHeight (IntPtr arrowCap, float height);
922 [DllImport("gdiplus.dll")]
923 internal static extern Status GdipGetAdjustableArrowCapHeight (IntPtr arrowCap, out float height);
924 [DllImport("gdiplus.dll")]
925 internal static extern Status GdipSetAdjustableArrowCapWidth (IntPtr arrowCap, float width);
926 [DllImport("gdiplus.dll")]
927 internal static extern Status GdipGetAdjustableArrowCapWidth (IntPtr arrowCap, out float width);
928 [DllImport("gdiplus.dll")]
929 internal static extern Status GdipSetAdjustableArrowCapMiddleInset (IntPtr arrowCap, float middleInset);
930 [DllImport("gdiplus.dll")]
931 internal static extern Status GdipGetAdjustableArrowCapMiddleInset (IntPtr arrowCap, out float middleInset);
932 [DllImport("gdiplus.dll")]
933 internal static extern Status GdipSetAdjustableArrowCapFillState (IntPtr arrowCap, bool isFilled);
934 [DllImport("gdiplus.dll")]
935 internal static extern Status GdipGetAdjustableArrowCapFillState (IntPtr arrowCap, out bool isFilled);
938 [DllImport("gdiplus.dll")]
939 internal static extern Status GdipCreateFromHWND (IntPtr hwnd, out IntPtr graphics);
941 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
942 internal unsafe static extern Status GdipMeasureString(IntPtr graphics, string str, int length,
943 IntPtr font, ref RectangleF layoutRect, IntPtr stringFormat, out RectangleF boundingBox,
944 int *codepointsFitted, int *linesFilled);
946 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
947 internal static extern Status GdipMeasureCharacterRanges (IntPtr graphics, string str, int length, IntPtr font,
948 ref RectangleF layoutRect, IntPtr stringFormat, int regcount, out IntPtr regions);
950 [DllImport("gdiplus.dll")]
951 internal static extern Status GdipSetStringFormatMeasurableCharacterRanges (IntPtr native,
952 int cnt, CharacterRange [] range);
954 [DllImport("gdiplus.dll")]
955 internal static extern Status GdipGetStringFormatMeasurableCharacterRangeCount (IntPtr native,
959 [DllImport("gdiplus.dll")]
960 internal static extern Status GdipCreateBitmapFromScan0 (int width, int height, int stride, PixelFormat format, IntPtr scan0, out IntPtr bmp);
962 [DllImport("gdiplus.dll")]
963 internal static extern Status GdipCreateBitmapFromGraphics (int width, int height, IntPtr target, out IntPtr bitmap);
965 [DllImport("gdiplus.dll")]
966 internal static extern Status GdipBitmapLockBits (IntPtr bmp, ref Rectangle rc, ImageLockMode flags, PixelFormat format, [In, Out] BitmapData bmpData);
968 [DllImport("gdiplus.dll")]
969 internal static extern Status GdipBitmapSetResolution(IntPtr bmp, float xdpi, float ydpi);
971 [DllImport("gdiplus.dll")]
972 internal static extern Status GdipBitmapUnlockBits (IntPtr bmp, [In,Out] BitmapData bmpData);
974 [DllImport("gdiplus.dll")]
975 internal static extern Status GdipBitmapGetPixel (IntPtr bmp, int x, int y, out int argb);
977 [DllImport("gdiplus.dll")]
978 internal static extern Status GdipBitmapSetPixel (IntPtr bmp, int x, int y, int argb);
981 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
982 internal static extern Status GdipLoadImageFromFile ( [MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr image );
985 // Stream functions for Win32 (original Win32 ones)
986 [DllImport("gdiplus.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]
987 internal static extern Status GdipLoadImageFromStream([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, out IntPtr image);
989 [DllImport("gdiplus.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]
990 internal static extern Status GdipSaveImageToStream(HandleRef image, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, [In()] ref Guid clsidEncoder, HandleRef encoderParams);
993 [DllImport("gdiplus.dll")]
994 internal static extern Status GdipCloneImage(IntPtr image, out IntPtr imageclone);
996 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
997 internal static extern Status GdipLoadImageFromFileICM ( [MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr image );
999 [DllImport("gdiplus.dll")]
1000 internal static extern Status GdipCreateBitmapFromHBITMAP ( IntPtr hBitMap, IntPtr gdiPalette, out IntPtr image );
1002 [DllImport("gdiplus.dll")]
1003 internal static extern Status GdipDisposeImage ( IntPtr image );
1005 [DllImport("gdiplus.dll")]
1006 internal static extern Status GdipGetImageFlags(IntPtr image, out int flag);
1008 [DllImport ("gdiplus.dll")]
1009 internal static extern Status GdipGetImageType (IntPtr image, out ImageType type);
1011 [DllImport("gdiplus.dll")]
1012 internal static extern Status GdipImageGetFrameDimensionsCount ( IntPtr image, out uint count );
1014 [DllImport("gdiplus.dll")]
1015 internal static extern Status GdipImageGetFrameDimensionsList ( IntPtr image, [Out] Guid [] dimensionIDs, uint count );
1017 [DllImport("gdiplus.dll")]
1018 internal static extern Status GdipGetImageHeight (IntPtr image, out uint height);
1020 [DllImport("gdiplus.dll")]
1021 internal static extern Status GdipGetImageHorizontalResolution ( IntPtr image, out float resolution );
1023 [DllImport("gdiplus.dll")]
1024 internal static extern Status GdipGetImagePaletteSize ( IntPtr image, out int size );
1026 [DllImport("gdiplus.dll")]
1027 internal static extern Status GdipGetImagePalette (IntPtr image, IntPtr palette, int size);
1029 [DllImport("gdiplus.dll")]
1030 internal static extern Status GdipSetImagePalette (IntPtr image, IntPtr palette);
1032 [DllImport("gdiplus.dll")]
1033 internal static extern Status GdipGetImageDimension ( IntPtr image, out float width, out float height );
1035 [DllImport("gdiplus.dll")]
1036 internal static extern Status GdipGetImagePixelFormat ( IntPtr image, out PixelFormat format );
1038 [DllImport("gdiplus.dll")]
1039 internal static extern Status GdipGetPropertyCount (IntPtr image, out uint propNumbers);
1041 [DllImport("gdiplus.dll")]
1042 internal static extern Status GdipGetPropertyIdList (IntPtr image, uint propNumbers, [Out] int [] list);
1044 [DllImport("gdiplus.dll")]
1045 internal static extern Status GdipGetPropertySize (IntPtr image, out int bufferSize, out int propNumbers);
1047 [DllImport("gdiplus.dll")]
1048 internal static extern Status GdipGetAllPropertyItems (IntPtr image, int bufferSize, int propNumbers, IntPtr items);
1050 [DllImport("gdiplus.dll")]
1051 internal static extern Status GdipGetImageRawFormat ( IntPtr image, out Guid format );
1053 [DllImport("gdiplus.dll")]
1054 internal static extern Status GdipGetImageVerticalResolution ( IntPtr image, out float resolution );
1056 [DllImport("gdiplus.dll")]
1057 internal static extern Status GdipGetImageWidth (IntPtr image, out uint width);
1059 [DllImport("gdiplus.dll")]
1060 internal static extern Status GdipGetImageBounds ( IntPtr image, out RectangleF source, ref GraphicsUnit unit );
1062 [DllImport("gdiplus.dll")]
1063 internal static extern Status GdipGetEncoderParameterListSize ( IntPtr image, ref Guid encoder, out uint size );
1065 [DllImport("gdiplus.dll")]
1066 internal static extern Status GdipGetEncoderParameterList ( IntPtr image, ref Guid encoder, uint size, IntPtr buffer );
1068 [DllImport("gdiplus.dll")]
1069 internal static extern Status GdipImageGetFrameCount (IntPtr image, ref Guid guidDimension, out uint count );
1071 [DllImport("gdiplus.dll")]
1072 internal static extern Status GdipImageSelectActiveFrame (IntPtr image, ref Guid guidDimension, int frameIndex);
1074 [DllImport("gdiplus.dll")]
1075 internal static extern Status GdipGetPropertyItemSize (IntPtr image, int propertyID, out int propertySize);
1077 [DllImport("gdiplus.dll")]
1078 internal static extern Status GdipGetPropertyItem (IntPtr image, int propertyID, int propertySize, IntPtr buffer);
1080 [DllImport("gdiplus.dll")]
1081 internal static extern Status GdipRemovePropertyItem (IntPtr image, int propertyId);
1083 [DllImport("gdiplus.dll")]
1084 internal unsafe static extern Status GdipSetPropertyItem (IntPtr image, GdipPropertyItem *propertyItem);
1086 [DllImport("gdiplus.dll")]
1087 internal static extern Status GdipGetImageThumbnail ( IntPtr image, uint width, uint height, out IntPtr thumbImage, IntPtr callback, IntPtr callBackData );
1089 [DllImport("gdiplus.dll")]
1090 internal static extern Status GdipImageRotateFlip ( IntPtr image, RotateFlipType rotateFlipType );
1092 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
1093 internal static extern Status GdipSaveImageToFile (IntPtr image, string filename, ref Guid encoderClsID, IntPtr encoderParameters);
1095 [DllImport("gdiplus.dll")]
1096 internal static extern Status GdipSaveAdd ( IntPtr image, IntPtr encoderParameters );
1098 [DllImport("gdiplus.dll")]
1099 internal static extern Status GdipSaveAddImage (IntPtr image, IntPtr imagenew, IntPtr encoderParameters);
1101 [DllImport("gdiplus.dll")]
1102 internal static extern Status GdipDrawImageI (IntPtr graphics, IntPtr image, int x, int y);
1103 [DllImport("gdiplus.dll")]
1104 internal static extern Status GdipGetImageGraphicsContext (IntPtr image, out IntPtr graphics);
1105 [DllImport("gdiplus.dll")]
1106 internal static extern Status GdipDrawImage (IntPtr graphics, IntPtr image, float x, float y);
1108 [DllImport("gdiplus.dll")]
1109 internal static extern Status GdipBeginContainer (IntPtr graphics, ref RectangleF dstrect, ref RectangleF srcrect, GraphicsUnit unit, out uint state);
1110 [DllImport("gdiplus.dll")]
1111 internal static extern Status GdipBeginContainerI (IntPtr graphics, ref Rectangle dstrect, ref Rectangle srcrect, GraphicsUnit unit, out uint state);
1112 [DllImport("gdiplus.dll")]
1113 internal static extern Status GdipBeginContainer2 (IntPtr graphics, out uint state);
1115 [DllImport("gdiplus.dll")]
1116 internal static extern Status GdipDrawImagePoints (IntPtr graphics, IntPtr image, PointF [] destPoints, int count);
1119 [DllImport("gdiplus.dll")]
1120 internal static extern Status GdipDrawImagePointsI (IntPtr graphics, IntPtr image, Point [] destPoints, int count);
1122 [DllImport("gdiplus.dll")]
1123 internal static extern Status GdipDrawImageRectRectI (IntPtr graphics, IntPtr image,
1124 int dstx, int dsty, int dstwidth, int dstheight,
1125 int srcx, int srcy, int srcwidth, int srcheight,
1126 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1128 [DllImport("gdiplus.dll")]
1129 internal static extern Status GdipDrawImageRectRect (IntPtr graphics, IntPtr image,
1130 float dstx, float dsty, float dstwidth, float dstheight,
1131 float srcx, float srcy, float srcwidth, float srcheight,
1132 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1134 [DllImport("gdiplus.dll")]
1135 internal static extern Status GdipDrawImagePointsRectI (IntPtr graphics, IntPtr image,
1136 Point [] destPoints, int count, int srcx, int srcy, int srcwidth, int srcheight,
1137 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1139 [DllImport("gdiplus.dll")]
1140 internal static extern Status GdipDrawImagePointsRect (IntPtr graphics, IntPtr image,
1141 PointF [] destPoints, int count, float srcx, float srcy, float srcwidth, float srcheight,
1142 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1144 [DllImport("gdiplus.dll")]
1145 internal static extern Status GdipDrawImageRect(IntPtr graphics, IntPtr image, float x, float y, float width, float height);
1146 [DllImport("gdiplus.dll")]
1147 internal static extern Status GdipDrawImagePointRect(IntPtr graphics, IntPtr image, float x,
1148 float y, float srcx, float srcy, float srcwidth, float srcheight, GraphicsUnit srcUnit);
1150 [DllImport("gdiplus.dll")]
1151 internal static extern Status GdipDrawImagePointRectI(IntPtr graphics, IntPtr image, int x,
1152 int y, int srcx, int srcy, int srcwidth,
1153 int srcheight, GraphicsUnit srcUnit);
1155 [DllImport("gdiplus.dll")]
1156 internal static extern Status GdipCreateStringFormat(StringFormatFlags formatAttributes, int language, out IntPtr native);
1158 [DllImport("gdiplus.dll")]
1159 internal static extern Status GdipCreateHBITMAPFromBitmap (IntPtr bmp, out IntPtr HandleBmp, int clrbackground);
1161 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
1162 internal static extern Status GdipCreateBitmapFromFile ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr bitmap);
1164 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
1165 internal static extern Status GdipCreateBitmapFromFileICM ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr bitmap);
1167 [DllImport("gdiplus.dll")]
1168 internal static extern Status GdipCreateHICONFromBitmap (IntPtr bmp, out IntPtr HandleIcon);
1170 [DllImport("gdiplus.dll")]
1171 internal static extern Status GdipCreateBitmapFromHICON (IntPtr hicon, out IntPtr bitmap);
1173 [DllImport("gdiplus.dll")]
1174 internal static extern Status GdipCreateBitmapFromResource (IntPtr hInstance,
1175 string lpBitmapName, out IntPtr bitmap);
1178 [DllImport ("gdiplus.dll")]
1179 internal static extern Status GdipCreateMatrix (out IntPtr matrix);
1180 [DllImport ("gdiplus.dll")]
1181 internal static extern Status GdipCreateMatrix2 (float m11, float m12, float m21, float m22, float dx, float dy, out IntPtr matrix);
1182 [DllImport ("gdiplus.dll")]
1183 internal static extern Status GdipCreateMatrix3 (ref RectangleF rect, PointF [] dstplg, out IntPtr matrix);
1184 [DllImport ("gdiplus.dll")]
1185 internal static extern Status GdipCreateMatrix3I (ref Rectangle rect, Point [] dstplg, out IntPtr matrix);
1186 [DllImport ("gdiplus.dll")]
1187 internal static extern Status GdipDeleteMatrix (IntPtr matrix);
1189 [DllImport ("gdiplus.dll")]
1190 internal static extern Status GdipCloneMatrix (IntPtr matrix, out IntPtr cloneMatrix);
1191 [DllImport ("gdiplus.dll")]
1192 internal static extern Status GdipSetMatrixElements (IntPtr matrix, float m11, float m12, float m21, float m22, float dx, float dy);
1193 [DllImport ("gdiplus.dll")]
1194 internal static extern Status GdipGetMatrixElements (IntPtr matrix, IntPtr matrixOut);
1195 [DllImport ("gdiplus.dll")]
1196 internal static extern Status GdipMultiplyMatrix (IntPtr matrix, IntPtr matrix2, MatrixOrder order);
1197 [DllImport ("gdiplus.dll")]
1198 internal static extern Status GdipTranslateMatrix (IntPtr matrix, float offsetX, float offsetY, MatrixOrder order);
1199 [DllImport ("gdiplus.dll")]
1200 internal static extern Status GdipScaleMatrix (IntPtr matrix, float scaleX, float scaleY, MatrixOrder order);
1201 [DllImport ("gdiplus.dll")]
1202 internal static extern Status GdipRotateMatrix (IntPtr matrix, float angle, MatrixOrder order);
1204 [DllImport ("gdiplus.dll")]
1205 internal static extern Status GdipShearMatrix (IntPtr matrix, float shearX, float shearY, MatrixOrder order);
1207 [DllImport ("gdiplus.dll")]
1208 internal static extern Status GdipInvertMatrix (IntPtr matrix);
1209 [DllImport ("gdiplus.dll")]
1210 internal static extern Status GdipTransformMatrixPoints (IntPtr matrix, PointF [] pts, int count);
1211 [DllImport ("gdiplus.dll")]
1212 internal static extern Status GdipTransformMatrixPointsI (IntPtr matrix, Point [] pts, int count);
1213 [DllImport ("gdiplus.dll")]
1214 internal static extern Status GdipVectorTransformMatrixPoints (IntPtr matrix, PointF [] pts, int count);
1215 [DllImport ("gdiplus.dll")]
1216 internal static extern Status GdipVectorTransformMatrixPointsI (IntPtr matrix, Point [] pts, int count);
1217 [DllImport ("gdiplus.dll")]
1218 internal static extern Status GdipIsMatrixInvertible (IntPtr matrix, out bool result);
1220 [DllImport ("gdiplus.dll")]
1221 internal static extern Status GdipIsMatrixIdentity (IntPtr matrix, out bool result);
1222 [DllImport ("gdiplus.dll")]
1223 internal static extern Status GdipIsMatrixEqual (IntPtr matrix, IntPtr matrix2, out bool result);
1225 // GraphicsPath functions
1226 [DllImport ("gdiplus.dll")]
1227 internal static extern Status GdipCreatePath (FillMode brushMode, out IntPtr path);
1228 [DllImport ("gdiplus.dll")]
1229 internal static extern Status GdipCreatePath2 (PointF [] points, byte [] types, int count, FillMode brushMode, out IntPtr path);
1230 [DllImport ("gdiplus.dll")]
1231 internal static extern Status GdipCreatePath2I (Point [] points, byte [] types, int count, FillMode brushMode, out IntPtr path);
1232 [DllImport ("gdiplus.dll")]
1233 internal static extern Status GdipClonePath (IntPtr path, out IntPtr clonePath);
1234 [DllImport ("gdiplus.dll")]
1235 internal static extern Status GdipDeletePath (IntPtr path);
1236 [DllImport ("gdiplus.dll")]
1237 internal static extern Status GdipResetPath (IntPtr path);
1238 [DllImport ("gdiplus.dll")]
1239 internal static extern Status GdipGetPointCount (IntPtr path, out int count);
1240 [DllImport ("gdiplus.dll")]
1241 internal static extern Status GdipGetPathTypes (IntPtr path, [Out] byte [] types, int count);
1242 [DllImport ("gdiplus.dll")]
1243 internal static extern Status GdipGetPathPoints (IntPtr path, [Out] PointF [] points, int count);
1244 [DllImport ("gdiplus.dll")]
1245 internal static extern Status GdipGetPathPointsI (IntPtr path, [Out] Point [] points, int count);
1246 [DllImport ("gdiplus.dll")]
1247 internal static extern Status GdipGetPathFillMode (IntPtr path, out FillMode fillMode);
1248 [DllImport ("gdiplus.dll")]
1249 internal static extern Status GdipSetPathFillMode (IntPtr path, FillMode fillMode);
1250 [DllImport ("gdiplus.dll")]
1251 internal static extern Status GdipStartPathFigure (IntPtr path);
1252 [DllImport ("gdiplus.dll")]
1253 internal static extern Status GdipClosePathFigure (IntPtr path);
1254 [DllImport ("gdiplus.dll")]
1255 internal static extern Status GdipClosePathFigures (IntPtr path);
1256 [DllImport ("gdiplus.dll")]
1257 internal static extern Status GdipSetPathMarker (IntPtr path);
1258 [DllImport ("gdiplus.dll")]
1259 internal static extern Status GdipClearPathMarkers (IntPtr path);
1260 [DllImport ("gdiplus.dll")]
1261 internal static extern Status GdipReversePath (IntPtr path);
1262 [DllImport ("gdiplus.dll")]
1263 internal static extern Status GdipGetPathLastPoint (IntPtr path, out PointF lastPoint);
1264 [DllImport ("gdiplus.dll")]
1265 internal static extern Status GdipAddPathLine (IntPtr path, float x1, float y1, float x2, float y2);
1266 [DllImport ("gdiplus.dll")]
1267 internal static extern Status GdipAddPathLine2 (IntPtr path, PointF[] points, int count);
1268 [DllImport ("gdiplus.dll")]
1269 internal static extern Status GdipAddPathLine2I (IntPtr path, Point[] points, int count);
1270 [DllImport ("gdiplus.dll")]
1271 internal static extern Status GdipAddPathArc (IntPtr path, float x, float y, float width, float height, float startAngle, float sweepAngle);
1272 [DllImport ("gdiplus.dll")]
1273 internal static extern Status GdipAddPathBezier (IntPtr path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
1274 [DllImport ("gdiplus.dll")]
1275 internal static extern Status GdipAddPathBeziers (IntPtr path, PointF [] points, int count);
1276 [DllImport ("gdiplus.dll")]
1277 internal static extern Status GdipAddPathCurve (IntPtr path, PointF [] points, int count);
1278 [DllImport ("gdiplus.dll")]
1279 internal static extern Status GdipAddPathCurveI (IntPtr path, Point [] points, int count);
1280 [DllImport ("gdiplus.dll")]
1281 internal static extern Status GdipAddPathCurve2 (IntPtr path, PointF [] points, int count, float tension);
1282 [DllImport ("gdiplus.dll")]
1283 internal static extern Status GdipAddPathCurve2I (IntPtr path, Point [] points, int count, float tension);
1284 [DllImport ("gdiplus.dll")]
1285 internal static extern Status GdipAddPathCurve3 (IntPtr path, PointF [] points, int count, int offset, int numberOfSegments, float tension);
1286 [DllImport ("gdiplus.dll")]
1287 internal static extern Status GdipAddPathCurve3I (IntPtr path, Point [] points, int count, int offset, int numberOfSegments, float tension);
1288 [DllImport ("gdiplus.dll")]
1289 internal static extern Status GdipAddPathClosedCurve (IntPtr path, PointF [] points, int count);
1290 [DllImport ("gdiplus.dll")]
1291 internal static extern Status GdipAddPathClosedCurveI (IntPtr path, Point [] points, int count);
1292 [DllImport ("gdiplus.dll")]
1293 internal static extern Status GdipAddPathClosedCurve2 (IntPtr path, PointF [] points, int count, float tension);
1294 [DllImport ("gdiplus.dll")]
1295 internal static extern Status GdipAddPathClosedCurve2I (IntPtr path, Point [] points, int count, float tension);
1296 [DllImport ("gdiplus.dll")]
1297 internal static extern Status GdipAddPathRectangle (IntPtr path, float x, float y, float width, float height);
1298 [DllImport ("gdiplus.dll")]
1299 internal static extern Status GdipAddPathRectangles (IntPtr path, RectangleF [] rects, int count);
1300 [DllImport ("gdiplus.dll")]
1301 internal static extern Status GdipAddPathEllipse (IntPtr path, float x, float y, float width, float height);
1302 [DllImport ("gdiplus.dll")]
1303 internal static extern Status GdipAddPathEllipseI (IntPtr path, int x, int y, int width, int height);
1304 [DllImport ("gdiplus.dll")]
1305 internal static extern Status GdipAddPathPie (IntPtr path, float x, float y, float width, float height, float startAngle, float sweepAngle);
1306 [DllImport ("gdiplus.dll")]
1307 internal static extern Status GdipAddPathPieI (IntPtr path, int x, int y, int width, int height, float startAngle, float sweepAngle);
1308 [DllImport ("gdiplus.dll")]
1309 internal static extern Status GdipAddPathPolygon (IntPtr path, PointF [] points, int count);
1310 [DllImport ("gdiplus.dll")]
1311 internal static extern Status GdipAddPathPath (IntPtr path, IntPtr addingPath, bool connect);
1312 [DllImport ("gdiplus.dll")]
1313 internal static extern Status GdipAddPathLineI (IntPtr path, int x1, int y1, int x2, int y2);
1314 [DllImport ("gdiplus.dll")]
1315 internal static extern Status GdipAddPathArcI (IntPtr path, int x, int y, int width, int height, float startAngle, float sweepAngle);
1317 [DllImport ("gdiplus.dll")]
1318 internal static extern Status GdipAddPathBezierI (IntPtr path, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
1319 [DllImport ("gdiplus.dll")]
1320 internal static extern Status GdipAddPathBeziersI (IntPtr path, Point [] points, int count);
1322 [DllImport ("gdiplus.dll")]
1323 internal static extern Status GdipAddPathPolygonI (IntPtr path, Point [] points, int count);
1324 [DllImport ("gdiplus.dll")]
1325 internal static extern Status GdipAddPathRectangleI (IntPtr path, int x, int y, int width, int height);
1326 [DllImport ("gdiplus.dll")]
1327 internal static extern Status GdipAddPathRectanglesI (IntPtr path, Rectangle [] rects, int count);
1328 [DllImport ("gdiplus.dll")]
1329 internal static extern Status GdipFlattenPath (IntPtr path, IntPtr matrix, float floatness);
1330 [DllImport ("gdiplus.dll")]
1331 internal static extern Status GdipTransformPath (IntPtr path, IntPtr matrix);
1332 [DllImport ("gdiplus.dll")]
1333 internal static extern Status GdipWarpPath (IntPtr path, IntPtr matrix,
1334 PointF [] points, int count,
1335 float srcx, float srcy, float srcwidth, float srcheight,
1336 WarpMode mode, float flatness);
1337 [DllImport ("gdiplus.dll")]
1338 internal static extern Status GdipWidenPath (IntPtr path, IntPtr pen, IntPtr matrix, float flatness);
1339 [DllImport ("gdiplus.dll")]
1340 internal static extern Status GdipGetPathWorldBounds (IntPtr path, out RectangleF bounds, IntPtr matrix, IntPtr pen);
1341 [DllImport ("gdiplus.dll")]
1342 internal static extern Status GdipGetPathWorldBoundsI (IntPtr path, out Rectangle bounds, IntPtr matrix, IntPtr pen);
1343 [DllImport ("gdiplus.dll")]
1344 internal static extern Status GdipIsVisiblePathPoint (IntPtr path, float x, float y, IntPtr graphics, out bool result);
1345 [DllImport ("gdiplus.dll")]
1346 internal static extern Status GdipIsVisiblePathPointI (IntPtr path, int x, int y, IntPtr graphics, out bool result);
1347 [DllImport ("gdiplus.dll")]
1348 internal static extern Status GdipIsOutlineVisiblePathPoint (IntPtr path, float x, float y, IntPtr pen, IntPtr graphics, out bool result);
1349 [DllImport ("gdiplus.dll")]
1350 internal static extern Status GdipIsOutlineVisiblePathPointI (IntPtr path, int x, int y, IntPtr pen, IntPtr graphics, out bool result);
1352 // GraphicsPathIterator
1353 [DllImport("gdiplus.dll")]
1354 internal static extern Status GdipCreatePathIter (out IntPtr iterator, IntPtr path);
1355 [DllImport("gdiplus.dll")]
1356 internal static extern Status GdipPathIterGetCount (IntPtr iterator, out int count);
1357 [DllImport("gdiplus.dll")]
1358 internal static extern Status GdipPathIterGetSubpathCount (IntPtr iterator, out int count);
1359 [DllImport("gdiplus.dll")]
1360 internal static extern Status GdipDeletePathIter (IntPtr iterator);
1361 [DllImport("gdiplus.dll")]
1362 internal static extern Status GdipPathIterCopyData (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int startIndex, int endIndex);
1363 [DllImport("gdiplus.dll")]
1364 internal static extern Status GdipPathIterEnumerate (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int count);
1365 [DllImport("gdiplus.dll")]
1366 internal static extern Status GdipPathIterHasCurve (IntPtr iterator, out bool curve);
1367 [DllImport("gdiplus.dll")]
1368 internal static extern Status GdipPathIterNextMarkerPath (IntPtr iterator, out int resultCount, IntPtr path);
1369 [DllImport("gdiplus.dll")]
1370 internal static extern Status GdipPathIterNextMarker (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex);
1371 [DllImport("gdiplus.dll")]
1372 internal static extern Status GdipPathIterNextPathType (IntPtr iterator, out int resultCount, out byte pathType, out int startIndex, out int endIndex);
1373 [DllImport("gdiplus.dll")]
1374 internal static extern Status GdipPathIterNextSubpathPath (IntPtr iterator, out int resultCount, IntPtr path, out bool isClosed);
1375 [DllImport("gdiplus.dll")]
1376 internal static extern Status GdipPathIterNextSubpath (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex, out bool isClosed);
1377 [DllImport("gdiplus.dll")]
1378 internal static extern Status GdipPathIterRewind (IntPtr iterator);
1381 [DllImport ("gdiplus.dll")]
1382 internal static extern Status GdipCreateImageAttributes (out IntPtr imageattr);
1384 [DllImport ("gdiplus.dll")]
1385 internal static extern Status GdipSetImageAttributesColorKeys (IntPtr imageattr,
1386 ColorAdjustType type, bool enableFlag, int colorLow, int colorHigh);
1388 [DllImport ("gdiplus.dll")]
1389 internal static extern Status GdipDisposeImageAttributes (IntPtr imageattr);
1391 [DllImport ("gdiplus.dll")]
1392 internal static extern Status GdipSetImageAttributesColorMatrix (IntPtr imageattr,
1393 ColorAdjustType type, bool enableFlag, IntPtr colorMatrix,
1394 IntPtr grayMatrix, ColorMatrixFlag flags);
1396 [DllImport ("gdiplus.dll")]
1397 internal static extern Status GdipSetImageAttributesGamma (IntPtr imageattr,
1398 ColorAdjustType type, bool enableFlag,
1401 [DllImport ("gdiplus.dll")]
1402 internal static extern Status GdipSetImageAttributesNoOp (IntPtr imageattr,
1403 ColorAdjustType type, bool enableFlag);
1405 [DllImport ("gdiplus.dll")]
1406 internal static extern Status GdipSetImageAttributesOutputChannel (IntPtr imageattr,
1407 ColorAdjustType type, bool enableFlag, ColorChannelFlag channelFlags);
1409 [DllImport ("gdiplus.dll", CharSet=CharSet.Auto)]
1410 internal static extern Status GdipSetImageAttributesOutputChannelColorProfile (IntPtr imageattr,
1411 ColorAdjustType type, bool enableFlag, [MarshalAs (UnmanagedType.LPWStr)] string profileName);
1413 [DllImport ("gdiplus.dll")]
1414 internal static extern Status GdipSetImageAttributesRemapTable (IntPtr imageattr,
1415 ColorAdjustType type, bool enableFlag, uint mapSize, IntPtr colorMap);
1417 [DllImport ("gdiplus.dll")]
1418 internal static extern Status GdipSetImageAttributesThreshold (IntPtr imageattr,
1419 ColorAdjustType type, bool enableFlag, float thresHold);
1421 [DllImport ("gdiplus.dll")]
1422 internal static extern Status GdipCloneImageAttributes(IntPtr imageattr, out IntPtr cloneImageattr);
1424 [DllImport ("gdiplus.dll")]
1425 internal static extern Status GdipGetImageAttributesAdjustedPalette (IntPtr imageattr, IntPtr colorPalette,
1426 ColorAdjustType colorAdjustType);
1428 [DllImport ("gdiplus.dll")]
1429 internal static extern Status GdipSetImageAttributesWrapMode(IntPtr imageattr, WrapMode wrap,
1430 int argb, bool clamp);
1434 [DllImport("gdiplus.dll")]
1435 internal static extern Status GdipCreateFont (IntPtr fontFamily, float emSize, FontStyle style, GraphicsUnit unit, out IntPtr font);
1436 [DllImport("gdiplus.dll")]
1437 internal static extern Status GdipDeleteFont (IntPtr font);
1438 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
1439 internal static extern Status GdipGetLogFont(IntPtr font, IntPtr graphics, [MarshalAs(UnmanagedType.AsAny), Out] object logfontA);
1441 [DllImport("gdiplus.dll")]
1442 internal static extern Status GdipCreateFontFromDC(IntPtr hdc, out IntPtr font);
1443 [DllImport("gdiplus.dll", SetLastError=true, CharSet=CharSet.Auto)]
1444 internal static extern Status GdipCreateFontFromLogfont(IntPtr hdc, ref LOGFONT lf, out IntPtr ptr);
1446 // These are our private functions, they exists in our own libgdiplus library, this way we
1447 // avoid relying on wine in System.Drawing
1448 [DllImport("gdiplus.dll", CharSet=CharSet.Ansi)]
1449 internal static extern Status GdipCreateFontFromHfont(IntPtr hdc, out IntPtr font, ref LOGFONT lf);
1451 // This is win32/gdi, not gdiplus, but it's easier to keep in here, also see above comment
1452 [DllImport("gdi32.dll", CallingConvention=CallingConvention.StdCall, CharSet = CharSet.Auto)]
1453 internal static extern IntPtr CreateFontIndirect (ref LOGFONT logfont);
1454 [DllImport("user32.dll", EntryPoint="GetDC", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1455 internal static extern IntPtr GetDC(IntPtr hwnd);
1456 [DllImport("user32.dll", EntryPoint="ReleaseDC", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1457 internal static extern int ReleaseDC (IntPtr hWnd, IntPtr hDC);
1458 [DllImport("gdi32.dll", EntryPoint="SelectObject", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1459 internal static extern IntPtr SelectObject(IntPtr hdc, IntPtr obj);
1460 [DllImport("user32.dll", SetLastError=true)]
1461 internal static extern bool GetIconInfo (IntPtr hIcon, out IconInfo iconinfo);
1462 [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, SetLastError=true)]
1463 internal static extern IntPtr CreateIconIndirect ([In] ref IconInfo piconinfo);
1464 [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, SetLastError=true)]
1465 internal static extern bool DestroyIcon (IntPtr hIcon);
1466 [DllImport("gdi32.dll")]
1467 internal static extern bool DeleteObject (IntPtr hObject);
1468 [DllImport("user32.dll")]
1469 internal static extern IntPtr GetDesktopWindow ();
1471 [DllImport("gdi32.dll", SetLastError=true)]
1472 public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest,
1473 int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
1475 [DllImport ("user32.dll", EntryPoint = "GetSysColor", CallingConvention = CallingConvention.StdCall)]
1476 public static extern uint Win32GetSysColor (GetSysColorIndex index);
1479 // Some special X11 stuff
1480 [DllImport("libX11", EntryPoint="XOpenDisplay")]
1481 internal extern static IntPtr XOpenDisplay(IntPtr display);
1483 [DllImport("libX11", EntryPoint="XCloseDisplay")]
1484 internal extern static int XCloseDisplay(IntPtr display);
1486 [DllImport ("libX11", EntryPoint="XRootWindow")]
1487 internal extern static IntPtr XRootWindow(IntPtr display, int screen);
1489 [DllImport ("libX11", EntryPoint="XDefaultScreen")]
1490 internal extern static int XDefaultScreen(IntPtr display);
1492 [DllImport ("libX11", EntryPoint="XDefaultDepth")]
1493 internal extern static uint XDefaultDepth(IntPtr display, int screen);
1495 [DllImport ("libX11", EntryPoint="XGetImage")]
1496 internal extern static IntPtr XGetImage(IntPtr display, IntPtr drawable, int src_x, int src_y, int width, int height, int pane, int format);
1498 [DllImport ("libX11", EntryPoint="XGetPixel")]
1499 internal extern static int XGetPixel(IntPtr image, int x, int y);
1501 [DllImport ("libX11", EntryPoint="XDestroyImage")]
1502 internal extern static int XDestroyImage(IntPtr image);
1504 [DllImport ("libX11", EntryPoint="XDefaultVisual")]
1505 internal extern static IntPtr XDefaultVisual(IntPtr display, int screen);
1507 [DllImport ("libX11", EntryPoint="XGetVisualInfo")]
1508 internal extern static IntPtr XGetVisualInfo (IntPtr display, int vinfo_mask, ref XVisualInfo vinfo_template, ref int nitems);
1510 [DllImport ("libX11", EntryPoint="XVisualIDFromVisual")]
1511 internal extern static IntPtr XVisualIDFromVisual (IntPtr visual);
1513 [DllImport ("libX11", EntryPoint="XFree")]
1514 internal extern static void XFree (IntPtr data);
1517 [DllImport ("gdiplus.dll")]
1518 internal static extern Status GdipGetFontCollectionFamilyCount (IntPtr collection, out int found);
1520 [DllImport ("gdiplus.dll")]
1521 internal static extern Status GdipGetFontCollectionFamilyList (IntPtr collection, int getCount, IntPtr[] dest, out int retCount);
1522 //internal static extern Status GdipGetFontCollectionFamilyList( IntPtr collection, int getCount, [Out] FontFamily [] familyList, out int retCount );
1524 [DllImport ("gdiplus.dll")]
1525 internal static extern Status GdipNewInstalledFontCollection (out IntPtr collection);
1527 [DllImport ("gdiplus.dll")]
1528 internal static extern Status GdipNewPrivateFontCollection (out IntPtr collection);
1530 [DllImport ("gdiplus.dll")]
1531 internal static extern Status GdipDeletePrivateFontCollection (ref IntPtr collection);
1533 [DllImport ("gdiplus.dll", CharSet=CharSet.Auto)]
1534 internal static extern Status GdipPrivateAddFontFile (IntPtr collection,
1535 [MarshalAs (UnmanagedType.LPWStr)] string fileName );
1537 [DllImport ("gdiplus.dll")]
1538 internal static extern Status GdipPrivateAddMemoryFont (IntPtr collection, IntPtr mem, int length);
1541 [DllImport ("gdiplus.dll", CharSet=CharSet.Auto)]
1542 internal static extern Status GdipCreateFontFamilyFromName (
1543 [MarshalAs(UnmanagedType.LPWStr)] string fName, IntPtr collection, out IntPtr fontFamily);
1545 [DllImport ("gdiplus.dll", CharSet=CharSet.Unicode)]
1546 internal static extern Status GdipGetFamilyName(IntPtr family, StringBuilder name, int language);
1548 [DllImport ("gdiplus.dll")]
1549 internal static extern Status GdipGetGenericFontFamilySansSerif (out IntPtr fontFamily);
1551 [DllImport ("gdiplus.dll")]
1552 internal static extern Status GdipGetGenericFontFamilySerif (out IntPtr fontFamily);
1554 [DllImport ("gdiplus.dll")]
1555 internal static extern Status GdipGetGenericFontFamilyMonospace (out IntPtr fontFamily);
1557 [DllImport ("gdiplus.dll")]
1558 internal static extern Status GdipGetCellAscent (IntPtr fontFamily, int style, out short ascent);
1560 [DllImport ("gdiplus.dll")]
1561 internal static extern Status GdipGetCellDescent (IntPtr fontFamily, int style, out short descent);
1563 [DllImport ("gdiplus.dll")]
1564 internal static extern Status GdipGetLineSpacing (IntPtr fontFamily, int style, out short spacing);
1566 [DllImport ("gdiplus.dll")]
1567 internal static extern Status GdipGetEmHeight (IntPtr fontFamily, int style, out short emHeight);
1569 [DllImport ("gdiplus.dll")]
1570 internal static extern Status GdipIsStyleAvailable (IntPtr fontFamily, int style, out bool styleAvailable);
1572 [DllImport ("gdiplus.dll")]
1573 internal static extern Status GdipDeleteFontFamily (IntPtr fontFamily);
1575 [DllImport ("gdiplus.dll")]
1576 internal static extern Status GdipGetFontSize (IntPtr font, out float size);
1578 [DllImport ("gdiplus.dll")]
1579 internal static extern Status GdipGetFontHeight (IntPtr font, IntPtr graphics, out float height);
1581 [DllImport ("gdiplus.dll")]
1582 internal static extern Status GdipGetFontHeightGivenDPI (IntPtr font, float dpi, out float height);
1584 [DllImport ("gdiplus.dll")]
1585 internal static extern Status GdipCloneFontFamily (IntPtr fontFamily, out IntPtr clone);
1589 [DllImport ("gdiplus.dll")]
1590 internal static extern Status GdipCreateStringFormat(int formatAttributes, int language, out IntPtr format);
1591 [DllImport ("gdiplus.dll")]
1592 internal static extern Status GdipStringFormatGetGenericDefault(out IntPtr format);
1593 [DllImport ("gdiplus.dll")]
1594 internal static extern Status GdipStringFormatGetGenericTypographic(out IntPtr format);
1595 [DllImport ("gdiplus.dll")]
1596 internal static extern Status GdipDeleteStringFormat(IntPtr format);
1597 [DllImport ("gdiplus.dll")]
1598 internal static extern Status GdipCloneStringFormat(IntPtr srcformat, out IntPtr format);
1599 [DllImport ("gdiplus.dll")]
1600 internal static extern Status GdipSetStringFormatFlags(IntPtr format, StringFormatFlags flags);
1601 [DllImport ("gdiplus.dll")]
1602 internal static extern Status GdipGetStringFormatFlags(IntPtr format, out StringFormatFlags flags);
1603 [DllImport ("gdiplus.dll")]
1604 internal static extern Status GdipSetStringFormatAlign(IntPtr format, StringAlignment align);
1605 [DllImport ("gdiplus.dll")]
1606 internal static extern Status GdipGetStringFormatAlign(IntPtr format, out StringAlignment align);
1607 [DllImport ("gdiplus.dll")]
1608 internal static extern Status GdipSetStringFormatLineAlign(IntPtr format, StringAlignment align);
1609 [DllImport ("gdiplus.dll")]
1610 internal static extern Status GdipGetStringFormatLineAlign(IntPtr format, out StringAlignment align);
1611 [DllImport ("gdiplus.dll")]
1612 internal static extern Status GdipSetStringFormatTrimming(IntPtr format, StringTrimming trimming);
1613 [DllImport ("gdiplus.dll")]
1614 internal static extern Status GdipGetStringFormatTrimming(IntPtr format, out StringTrimming trimming);
1615 [DllImport ("gdiplus.dll")]
1616 internal static extern Status GdipSetStringFormatHotkeyPrefix(IntPtr format, HotkeyPrefix hotkeyPrefix);
1617 [DllImport ("gdiplus.dll")]
1618 internal static extern Status GdipGetStringFormatHotkeyPrefix(IntPtr format, out HotkeyPrefix hotkeyPrefix);
1619 [DllImport ("gdiplus.dll")]
1620 internal static extern Status GdipSetStringFormatTabStops(IntPtr format, float firstTabOffset, int count, float [] tabStops);
1621 [DllImport ("gdiplus.dll")]
1622 internal static extern Status GdipGetStringFormatDigitSubstitution(IntPtr format, int language, out StringDigitSubstitute substitute);
1623 [DllImport ("gdiplus.dll")]
1624 internal static extern Status GdipSetStringFormatDigitSubstitution(IntPtr format, int language, StringDigitSubstitute substitute);
1625 [DllImport ("gdiplus.dll")]
1626 internal static extern Status GdipGetStringFormatTabStopCount(IntPtr format, out int count);
1627 [DllImport ("gdiplus.dll")]
1628 internal static extern Status GdipGetStringFormatTabStops(IntPtr format, int count, out float firstTabOffset, [In, Out] float [] tabStops);
1631 [DllImport ("gdiplus.dll", CharSet = CharSet.Auto)]
1632 internal static extern Status GdipCreateMetafileFromFile ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr metafile);
1633 [DllImport ("gdiplus.dll")]
1634 internal static extern Status GdipCreateMetafileFromEmf (IntPtr hEmf, bool deleteEmf, out IntPtr metafile);
1635 [DllImport ("gdiplus.dll")]
1636 internal static extern Status GdipCreateMetafileFromWmf (IntPtr hWmf, bool deleteWmf, WmfPlaceableFileHeader wmfPlaceableFileHeader, out IntPtr metafile);
1637 [DllImport ("gdiplus.dll", CharSet = CharSet.Auto)]
1638 internal static extern Status GdipGetMetafileHeaderFromFile ([MarshalAs (UnmanagedType.LPWStr)] string filename, IntPtr header);
1639 [DllImport ("gdiplus.dll")]
1640 internal static extern Status GdipGetMetafileHeaderFromMetafile (IntPtr metafile, IntPtr header);
1641 [DllImport ("gdiplus.dll")]
1642 internal static extern Status GdipGetMetafileHeaderFromEmf (IntPtr hEmf, IntPtr header);
1643 [DllImport ("gdiplus.dll")]
1644 internal static extern Status GdipGetMetafileHeaderFromWmf (IntPtr hWmf, IntPtr wmfPlaceableFileHeader, IntPtr header);
1645 [DllImport ("gdiplus.dll")]
1646 internal static extern Status GdipGetHemfFromMetafile (IntPtr metafile, out IntPtr hEmf);
1647 [DllImport ("gdiplus.dll")]
1648 internal static extern Status GdipGetMetafileDownLevelRasterizationLimit (IntPtr metafile, ref uint metafileRasterizationLimitDpi);
1649 [DllImport ("gdiplus.dll")]
1650 internal static extern Status GdipSetMetafileDownLevelRasterizationLimit (IntPtr metafile, uint metafileRasterizationLimitDpi);
1651 [DllImport ("gdiplus.dll")]
1652 internal static extern Status GdipPlayMetafileRecord (IntPtr metafile, EmfPlusRecordType recordType, int flags, int dataSize, byte[] data);
1654 [DllImport ("gdiplus.dll")]
1655 internal static extern Status GdipRecordMetafile (IntPtr hdc, EmfType type, ref RectangleF frameRect,
1656 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1657 [DllImport ("gdiplus.dll")]
1658 internal static extern Status GdipRecordMetafileI (IntPtr hdc, EmfType type, ref Rectangle frameRect,
1659 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1660 [DllImport ("gdiplus.dll")]
1661 internal static extern Status GdipRecordMetafileFileName ([MarshalAs (UnmanagedType.LPWStr)] string filename, IntPtr hdc, EmfType type,
1662 ref RectangleF frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1663 [DllImport ("gdiplus.dll")]
1664 internal static extern Status GdipRecordMetafileFileNameI ([MarshalAs (UnmanagedType.LPWStr)] string filename, IntPtr hdc, EmfType type,
1665 ref Rectangle frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1667 [DllImport("gdiplus.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]
1668 internal static extern Status GdipCreateMetafileFromStream([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, out IntPtr metafile);
1669 [DllImport("gdiplus.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]
1670 internal static extern Status GdipGetMetafileHeaderFromStream([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, IntPtr header);
1672 [DllImport ("gdiplus.dll")]
1673 internal static extern Status GdipRecordMetafileStream ([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, IntPtr hdc,
1674 EmfType type, ref RectangleF frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1675 [DllImport ("gdiplus.dll")]
1676 internal static extern Status GdipRecordMetafileStreamI ([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, IntPtr hdc,
1677 EmfType type, ref Rectangle frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1679 //ImageCodecInfo functions
1680 [DllImport("gdiplus.dll")]
1681 static internal extern Status GdipGetImageDecodersSize (out int decoderNums, out int arraySize);
1682 [DllImport("gdiplus.dll")]
1683 static internal extern Status GdipGetImageDecoders (int decoderNums, int arraySize, IntPtr decoders);
1684 [DllImport("gdiplus.dll")]
1685 static internal extern Status GdipGetImageEncodersSize (out int encoderNums, out int arraySize);
1686 [DllImport("gdiplus.dll")]
1687 static internal extern Status GdipGetImageEncoders (int encoderNums, int arraySize, IntPtr encoders);
1690 // These are stuff that is unix-only
1692 public delegate int StreamGetHeaderDelegate(IntPtr buf, int bufsz);
1693 public delegate int StreamGetBytesDelegate (IntPtr buf, int bufsz, bool peek);
1694 public delegate long StreamSeekDelegate (int offset, int whence);
1695 public delegate int StreamPutBytesDelegate (IntPtr buf, int bufsz);
1696 public delegate void StreamCloseDelegate ();
1697 public delegate long StreamSizeDelegate ();
1699 internal sealed class GdiPlusStreamHelper {
1700 public Stream stream;
1702 private StreamGetHeaderDelegate sghd = null;
1703 private StreamGetBytesDelegate sgbd = null;
1704 private StreamSeekDelegate skd = null;
1705 private StreamPutBytesDelegate spbd = null;
1706 private StreamCloseDelegate scd = null;
1707 private StreamSizeDelegate ssd = null;
1708 private byte[] start_buf;
1709 private int start_buf_pos;
1710 private int start_buf_len;
1711 private byte[] managedBuf;
1712 private const int default_bufsize = 4096;
1714 public GdiPlusStreamHelper (Stream s, bool seekToOrigin)
1716 managedBuf = new byte [default_bufsize];
1719 if (stream != null && stream.CanSeek && seekToOrigin) {
1720 stream.Seek (0, SeekOrigin.Begin);
1724 public int StreamGetHeaderImpl (IntPtr buf, int bufsz) {
1727 start_buf = new byte[bufsz];
1730 bytesRead = stream.Read (start_buf, 0, bufsz);
1731 } catch (IOException) {
1735 if (bytesRead > 0 && buf != IntPtr.Zero) {
1736 Marshal.Copy (start_buf, 0, (IntPtr) (buf.ToInt64()), bytesRead);
1740 start_buf_len = bytesRead;
1745 public StreamGetHeaderDelegate GetHeaderDelegate {
1747 if (stream != null && stream.CanRead) {
1749 sghd = new StreamGetHeaderDelegate (StreamGetHeaderImpl);
1757 public int StreamGetBytesImpl (IntPtr buf, int bufsz, bool peek)
1759 if (buf == IntPtr.Zero && peek) {
1763 if (bufsz > managedBuf.Length)
1764 managedBuf = new byte[bufsz];
1766 long streamPosition = 0;
1769 if (stream.CanSeek) {
1770 streamPosition = stream.Position;
1772 if (start_buf_len > 0) {
1773 if (start_buf_len > bufsz) {
1774 Array.Copy(start_buf, start_buf_pos, managedBuf, 0, bufsz);
1775 start_buf_pos += bufsz;
1776 start_buf_len -= bufsz;
1781 Array.Copy(start_buf, start_buf_pos, managedBuf, 0, start_buf_len);
1782 bufsz -= start_buf_len;
1783 bytesRead = start_buf_len;
1790 bytesRead += stream.Read (managedBuf, bytesRead, bufsz);
1791 } catch (IOException) {
1796 if (bytesRead > 0 && buf != IntPtr.Zero) {
1797 Marshal.Copy (managedBuf, 0, (IntPtr) (buf.ToInt64()), bytesRead);
1800 if (!stream.CanSeek && (bufsz == 10) && peek) {
1801 // Special 'hack' to support peeking of the type for gdi+ on non-seekable streams
1805 if (stream.CanSeek) {
1806 // If we are peeking bytes, then go back to original position before peeking
1807 stream.Seek (streamPosition, SeekOrigin.Begin);
1809 throw new NotSupportedException();
1817 public StreamGetBytesDelegate GetBytesDelegate {
1819 if (stream != null && stream.CanRead) {
1821 sgbd = new StreamGetBytesDelegate (StreamGetBytesImpl);
1829 public long StreamSeekImpl (int offset, int whence)
1831 // Make sure we have a valid 'whence'.
1832 if ((whence < 0) || (whence > 2))
1835 // Invalidate the start_buf if we're actually going to call a Seek method.
1836 start_buf_pos += start_buf_len;
1841 // Translate 'whence' into a SeekOrigin enum member.
1844 case 0: origin = SeekOrigin.Begin; break;
1845 case 1: origin = SeekOrigin.Current; break;
1846 case 2: origin = SeekOrigin.End; break;
1848 // The following line is redundant but necessary to avoid a
1849 // "Use of unassigned local variable" error without actually
1850 // initializing 'origin' to a dummy value.
1854 // Do the actual seek operation and return its result.
1855 return stream.Seek ((long) offset, origin);
1858 public StreamSeekDelegate SeekDelegate {
1860 if (stream != null && stream.CanSeek) {
1862 skd = new StreamSeekDelegate (StreamSeekImpl);
1870 public int StreamPutBytesImpl (IntPtr buf, int bufsz)
1872 if (bufsz > managedBuf.Length)
1873 managedBuf = new byte[bufsz];
1874 Marshal.Copy (buf, managedBuf, 0, bufsz);
1875 stream.Write (managedBuf, 0, bufsz);
1879 public StreamPutBytesDelegate PutBytesDelegate {
1881 if (stream != null && stream.CanWrite) {
1883 spbd = new StreamPutBytesDelegate (StreamPutBytesImpl);
1891 public void StreamCloseImpl ()
1896 public StreamCloseDelegate CloseDelegate {
1898 if (stream != null) {
1900 scd = new StreamCloseDelegate (StreamCloseImpl);
1908 public long StreamSizeImpl ()
1911 return stream.Length;
1917 public StreamSizeDelegate SizeDelegate {
1919 if (stream != null) {
1921 ssd = new StreamSizeDelegate (StreamSizeImpl);
1931 /* Mac only function calls */
1932 [DllImport("gdiplus.dll")]
1933 internal static extern Status GdipCreateFromContext_macosx (IntPtr cgref, int width, int height, out IntPtr graphics);
1935 /* Linux only function calls*/
1936 [DllImport("gdiplus.dll")]
1937 internal static extern Status GdipSetVisibleClip_linux (IntPtr graphics, ref Rectangle rect);
1939 [DllImport("gdiplus.dll")]
1940 internal static extern Status GdipCreateFromXDrawable_linux (IntPtr drawable, IntPtr display, out IntPtr graphics);
1942 // Stream functions for non-Win32 (libgdiplus specific)
1943 [DllImport("gdiplus.dll")]
1944 static internal extern Status GdipLoadImageFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1945 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1946 StreamCloseDelegate close, StreamSizeDelegate size, out IntPtr image);
1948 [DllImport("gdiplus.dll")]
1949 static internal extern Status GdipSaveImageToDelegate_linux (IntPtr image, StreamGetBytesDelegate getBytes,
1950 StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close,
1951 StreamSizeDelegate size, ref Guid encoderClsID, IntPtr encoderParameters);
1953 [DllImport("gdiplus.dll")]
1954 static internal extern Status GdipCreateMetafileFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1955 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1956 StreamCloseDelegate close, StreamSizeDelegate size, out IntPtr metafile);
1958 [DllImport("gdiplus.dll")]
1959 static internal extern Status GdipGetMetafileHeaderFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1960 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1961 StreamCloseDelegate close, StreamSizeDelegate size, IntPtr header);
1963 [DllImport("gdiplus.dll")]
1964 static internal extern Status GdipRecordMetafileFromDelegate_linux (StreamGetHeaderDelegate getHeader,
1965 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1966 StreamCloseDelegate close, StreamSizeDelegate size, IntPtr hdc, EmfType type, ref RectangleF frameRect,
1967 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1969 [DllImport("gdiplus.dll")]
1970 static internal extern Status GdipRecordMetafileFromDelegateI_linux (StreamGetHeaderDelegate getHeader,
1971 StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek,
1972 StreamCloseDelegate close, StreamSizeDelegate size, IntPtr hdc, EmfType type, ref Rectangle frameRect,
1973 MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
1975 [DllImport ("libc")]
1976 static extern int uname (IntPtr buf);