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)
10 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 using System.Runtime.InteropServices;
36 using System.Drawing.Drawing2D;
37 using System.Drawing.Imaging;
38 using System.Drawing.Text;
39 using System.Security;
41 using System.Runtime.InteropServices.ComTypes;
43 using IStream = System.Runtime.InteropServices.UCOMIStream;
46 namespace System.Drawing
49 /// GDI+ API Functions
51 [SuppressUnmanagedCodeSecurity]
52 internal class GDIPlus
54 public const int FACESIZE = 32;
55 public const int LANG_NEUTRAL = 0;
56 public static IntPtr Display = IntPtr.Zero;
57 public static bool UseX11Drawable;
58 public static bool UseQuartzDrawable = (Environment.GetEnvironmentVariable ("MONO_MWF_USE_QUARTZ_BACKEND") != null);
59 public static bool UseCocoaDrawable = (Environment.GetEnvironmentVariable ("MONO_GDIP_USE_COCOA_BACKEND") != null);
61 #region gdiplus.dll functions
64 [DllImport("gdiplus.dll")]
65 static internal extern Status GdiplusStartup(ref ulong token, ref GdiplusStartupInput input, ref GdiplusStartupOutput output);
66 [DllImport("gdiplus.dll")]
67 static internal extern void GdiplusShutdown(ref ulong token);
69 static ulong GdiPlusToken;
71 static void ProcessExit (object sender, EventArgs e)
73 // Called all pending objects and claim any pending handle before
76 GC.WaitForPendingFinalizers ();
\r
77 // This causes crashes in MS GDI+ because this call occurs before
78 // all managed GDI objects are finalized. When they are finalized they call
79 // into a shutdown GDI+ and we crash.
80 //GdiplusShutdown (ref GdiPlusToken);
82 if (UseX11Drawable && Display != IntPtr.Zero) {
83 XCloseDisplay (Display);
90 // check for Unix platforms - see FAQ for more details
91 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
92 int platform = (int) Environment.OSVersion.Platform;
93 UseX11Drawable = ((platform == 4) || (platform == 128));
95 GdiplusStartupInput input = GdiplusStartupInput.MakeGdiplusStartupInput();
96 GdiplusStartupOutput output = GdiplusStartupOutput.MakeGdiplusStartupOutput();
97 GdiplusStartup (ref GdiPlusToken, ref input, ref output);
98 AppDomain.CurrentDomain.ProcessExit += new EventHandler (ProcessExit);
101 // Copies a Ptr to an array of Points and releases the memory
102 static public void FromUnManagedMemoryToPointI(IntPtr prt, Point [] pts)
104 int nPointSize = Marshal.SizeOf(pts[0]);
106 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
107 pts[i] = (Point) Marshal.PtrToStructure(pos, typeof(Point));
109 Marshal.FreeHGlobal(prt);
112 // Copies a Ptr to an array of Points and releases the memory
113 static public void FromUnManagedMemoryToPoint (IntPtr prt, PointF [] pts)
115 int nPointSize = Marshal.SizeOf(pts[0]);
117 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
118 pts[i] = (PointF) Marshal.PtrToStructure(pos, typeof(Point));
120 Marshal.FreeHGlobal(prt);
123 // Copies an array of Points to unmanaged memory
124 static public IntPtr FromPointToUnManagedMemoryI(Point [] pts)
126 int nPointSize = Marshal.SizeOf(pts[0]);
127 IntPtr dest = Marshal.AllocHGlobal(nPointSize* pts.Length);
129 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
130 Marshal.StructureToPtr(pts[i], pos, false);
135 // Copies a Ptr to an array of v and releases the memory
136 static public void FromUnManagedMemoryToRectangles (IntPtr prt, RectangleF [] pts)
138 int nPointSize = Marshal.SizeOf (pts[0]);
140 for (int i = 0; i < pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
141 pts[i] = (RectangleF) Marshal.PtrToStructure(pos, typeof(RectangleF));
143 Marshal.FreeHGlobal(prt);
146 // Copies an array of Points to unmanaged memory
147 static public IntPtr FromPointToUnManagedMemory(PointF [] pts)
149 int nPointSize = Marshal.SizeOf(pts[0]);
150 IntPtr dest = Marshal.AllocHGlobal(nPointSize* pts.Length);
152 for (int i=0; i<pts.Length; i++, pos = new IntPtr (pos.ToInt64 () + nPointSize))
153 Marshal.StructureToPtr(pts[i], pos, false);
158 // Converts a status into exception
159 static internal void CheckStatus (Status status)
166 // TODO: Add more status code mappings here
168 case Status.GenericError:
169 throw new Exception ("Generic Error.");
171 case Status.InvalidParameter:
172 throw new ArgumentException ("Invalid Parameter. A null reference or invalid value was found.");
174 case Status.OutOfMemory:
175 throw new OutOfMemoryException ("Out of memory.");
177 case Status.ObjectBusy:
178 throw new MemberAccessException ("Object busy.");
180 case Status.InsufficientBuffer:
181 throw new IO.InternalBufferOverflowException ("Insufficient buffer.");
183 case Status.PropertyNotSupported:
184 throw new NotSupportedException ("Property not supported.");
186 case Status.FileNotFound:
187 throw new IO.FileNotFoundException ("File not found.");
189 case Status.AccessDenied:
190 throw new UnauthorizedAccessException ("Access denied.");
192 case Status.UnknownImageFormat:
193 throw new NotSupportedException ("Either image format is unknown or you don't have the required libraries for this format.");
195 case Status.NotImplemented:
196 throw new NotImplementedException ("Feature not implemented.");
198 case Status.WrongState:
199 throw new ArgumentException ("Properties not set properly.");
202 throw new Exception ("Unknown Error.");
208 [DllImport("gdiplus.dll")]
209 static internal extern IntPtr GdipAlloc (int size);
210 [DllImport("gdiplus.dll")]
211 static internal extern void GdipFree (IntPtr ptr);
215 [DllImport("gdiplus.dll")]
216 static internal extern Status GdipCloneBrush (IntPtr brush, out IntPtr clonedBrush);
217 [DllImport("gdiplus.dll")]
218 static internal extern Status GdipDeleteBrush (IntPtr brush);
219 [DllImport("gdiplus.dll")]
220 static internal extern Status GdipGetBrushType (IntPtr brush, out BrushType type);
224 [DllImport("gdiplus.dll")]
225 static internal extern Status GdipCreateRegion (out IntPtr region);
227 [DllImport("gdiplus.dll")]
228 static internal extern Status GdipDeleteRegion (IntPtr region);
230 [DllImport("gdiplus.dll")]
231 static internal extern Status GdipCloneRegion (IntPtr region, out IntPtr cloned);
233 [DllImport("gdiplus.dll")]
234 static internal extern Status GdipCreateRegionRect (ref RectangleF rect, out IntPtr region);
236 [DllImport("gdiplus.dll")]
237 static internal extern Status GdipCreateRegionRectI (ref Rectangle rect, out IntPtr region);
239 [DllImport("gdiplus.dll")]
240 static internal extern Status GdipCreateRegionPath (IntPtr path, out IntPtr region);
242 [DllImport("gdiplus.dll")]
243 static internal extern Status GdipTranslateRegion (IntPtr region, float dx, float dy);
245 [DllImport("gdiplus.dll")]
246 static internal extern Status GdipTranslateRegionI (IntPtr region, int dx, int dy);
248 [DllImport("gdiplus.dll")]
249 static internal extern Status GdipIsVisibleRegionPoint (IntPtr region, float x, float y,
250 IntPtr graphics, out bool result);
252 [DllImport("gdiplus.dll")]
253 static internal extern Status GdipIsVisibleRegionPointI (IntPtr region, int x, int y,
254 IntPtr graphics, out bool result);
256 [DllImport("gdiplus.dll")]
257 static internal extern Status GdipIsVisibleRegionRect (IntPtr region, float x, float y, float width,
258 float height, IntPtr graphics, out bool result);
260 [DllImport("gdiplus.dll")]
261 static internal extern Status GdipIsVisibleRegionRectI (IntPtr region, int x, int y, int width,
262 int height, IntPtr graphics, out bool result);
265 [DllImport("gdiplus.dll")]
266 static internal extern Status GdipCombineRegionRect (IntPtr region, ref RectangleF rect,
267 CombineMode combineMode);
269 [DllImport("gdiplus.dll")]
270 static internal extern Status GdipCombineRegionRectI (IntPtr region, ref Rectangle rect,
271 CombineMode combineMode);
273 [DllImport("gdiplus.dll")]
274 static internal extern Status GdipCombineRegionPath (IntPtr region, IntPtr path, CombineMode combineMode);
276 [DllImport("gdiplus.dll")]
277 static internal extern Status GdipGetRegionBounds (IntPtr region, IntPtr graphics, ref RectangleF rect);
279 [DllImport("gdiplus.dll")]
280 static internal extern Status GdipSetInfinite (IntPtr region);
282 [DllImport("gdiplus.dll")]
283 static internal extern Status GdipSetEmpty (IntPtr region);
285 [DllImport("gdiplus.dll")]
286 static internal extern Status GdipIsEmptyRegion (IntPtr region, IntPtr graphics, out bool result);
288 [DllImport("gdiplus.dll")]
289 static internal extern Status GdipIsInfiniteRegion (IntPtr region, IntPtr graphics, out bool result);
291 [DllImport("gdiplus.dll")]
292 static internal extern Status GdipCombineRegionRegion (IntPtr region, IntPtr region2,
293 CombineMode combineMode);
295 [DllImport("gdiplus.dll")]
296 static internal extern Status GdipIsEqualRegion (IntPtr region, IntPtr region2,
297 IntPtr graphics, out bool result);
299 [DllImport("gdiplus.dll")]
300 static internal extern Status GdipGetRegionDataSize (IntPtr region, out int bufferSize);
302 [DllImport("gdiplus.dll")]
303 static internal extern Status GdipGetRegionData (IntPtr region, byte[] buffer, int bufferSize,
306 [DllImport("gdiplus.dll")]
307 static internal extern Status GdipGetRegionScansCount (IntPtr region, out int count, IntPtr matrix);
309 [DllImport("gdiplus.dll")]
310 static internal extern Status GdipGetRegionScans (IntPtr region, IntPtr rects, out int count,
313 [DllImport("gdiplus.dll")]
314 static internal extern Status GdipTransformRegion(IntPtr region, IntPtr matrix);
316 [DllImport("gdiplus.dll")]
317 static internal extern Status GdipFillRegion(IntPtr graphics, IntPtr brush, IntPtr region);
319 // Solid brush functions
320 [DllImport("gdiplus.dll")]
321 static internal extern Status GdipCreateSolidFill (int color, out IntPtr brush);
322 [DllImport("gdiplus.dll")]
323 static internal extern Status GdipGetSolidFillColor (IntPtr brush, out int color);
324 [DllImport("gdiplus.dll")]
325 static internal extern Status GdipSetSolidFillColor (IntPtr brush, int color);
327 // Hatch Brush functions
328 [DllImport("gdiplus.dll")]
329 static internal extern Status GdipCreateHatchBrush (HatchStyle hatchstyle, int foreColor, int backColor, out IntPtr brush);
330 [DllImport("gdiplus.dll")]
331 static internal extern Status GdipGetHatchStyle (IntPtr brush, out HatchStyle hatchstyle);
332 [DllImport("gdiplus.dll")]
333 static internal extern Status GdipGetHatchForegroundColor (IntPtr brush, out int foreColor);
334 [DllImport("gdiplus.dll")]
335 static internal extern Status GdipGetHatchBackgroundColor (IntPtr brush, out int backColor);
337 // Texture brush functions
338 [DllImport("gdiplus.dll")]
339 static internal extern Status GdipGetTextureImage (IntPtr texture, out IntPtr image);
340 [DllImport("gdiplus.dll")]
341 static internal extern Status GdipCreateTexture (IntPtr image, WrapMode wrapMode, out IntPtr texture);
342 [DllImport("gdiplus.dll")]
343 static internal extern Status GdipCreateTextureIAI (IntPtr image, IntPtr imageAttributes, int x, int y, int width, int height, out IntPtr texture);
344 [DllImport("gdiplus.dll")]
345 static internal extern Status GdipCreateTextureIA (IntPtr image, IntPtr imageAttributes, float x, float y, float width, float height, out IntPtr texture);
346 [DllImport("gdiplus.dll")]
347 static internal extern Status GdipCreateTexture2I (IntPtr image, WrapMode wrapMode, int x, int y, int width, int height, out IntPtr texture);
348 [DllImport("gdiplus.dll")]
349 static internal extern Status GdipCreateTexture2 (IntPtr image, WrapMode wrapMode, float x, float y, float width, float height, out IntPtr texture);
350 [DllImport("gdiplus.dll")]
351 static internal extern Status GdipGetTextureTransform (IntPtr texture, IntPtr matrix);
352 [DllImport("gdiplus.dll")]
353 static internal extern Status GdipSetTextureTransform (IntPtr texture, IntPtr matrix);
354 [DllImport("gdiplus.dll")]
355 static internal extern Status GdipGetTextureWrapMode (IntPtr texture, out WrapMode wrapMode);
356 [DllImport("gdiplus.dll")]
357 static internal extern Status GdipSetTextureWrapMode (IntPtr texture, WrapMode wrapMode);
358 [DllImport("gdiplus.dll")]
359 static internal extern Status GdipMultiplyTextureTransform (IntPtr texture, IntPtr matrix, MatrixOrder order);
360 [DllImport("gdiplus.dll")]
361 static internal extern Status GdipResetTextureTransform (IntPtr texture);
362 [DllImport("gdiplus.dll")]
363 static internal extern Status GdipRotateTextureTransform (IntPtr texture, float angle, MatrixOrder order);
364 [DllImport("gdiplus.dll")]
365 static internal extern Status GdipScaleTextureTransform (IntPtr texture, float sx, float sy, MatrixOrder order);
366 [DllImport("gdiplus.dll")]
367 static internal extern Status GdipTranslateTextureTransform (IntPtr texture, float dx, float dy, MatrixOrder order);
369 // PathGradientBrush functions
370 [DllImport("gdiplus.dll")]
371 static internal extern Status GdipCreatePathGradientFromPath (IntPtr path, out IntPtr brush);
372 [DllImport("gdiplus.dll")]
373 static internal extern Status GdipCreatePathGradientI (Point [] points, int count, WrapMode wrapMode, out IntPtr brush);
374 [DllImport("gdiplus.dll")]
375 static internal extern Status GdipCreatePathGradient (PointF [] points, int count, WrapMode wrapMode, out IntPtr brush);
376 [DllImport("gdiplus.dll")]
377 static internal extern Status GdipGetPathGradientBlendCount (IntPtr brush, out int count);
378 [DllImport("gdiplus.dll")]
379 static internal extern Status GdipGetPathGradientBlend (IntPtr brush, float [] blend, float [] positions, int count);
380 [DllImport("gdiplus.dll")]
381 static internal extern Status GdipSetPathGradientBlend (IntPtr brush, float [] blend, float [] positions, int count);
382 [DllImport("gdiplus.dll")]
383 static internal extern Status GdipGetPathGradientCenterColor (IntPtr brush, out int color);
384 [DllImport("gdiplus.dll")]
385 static internal extern Status GdipSetPathGradientCenterColor (IntPtr brush, int color);
386 [DllImport("gdiplus.dll")]
387 static internal extern Status GdipGetPathGradientCenterPoint (IntPtr brush, out PointF point);
388 [DllImport("gdiplus.dll")]
389 static internal extern Status GdipSetPathGradientCenterPoint (IntPtr brush, ref PointF point);
390 [DllImport("gdiplus.dll")]
391 static internal extern Status GdipGetPathGradientFocusScales (IntPtr brush, out float xScale, out float yScale);
392 [DllImport("gdiplus.dll")]
393 static internal extern Status GdipSetPathGradientFocusScales (IntPtr brush, float xScale, float yScale);
394 [DllImport("gdiplus.dll")]
395 static internal extern Status GdipGetPathGradientPresetBlendCount (IntPtr brush, out int count);
396 [DllImport("gdiplus.dll")]
397 static internal extern Status GdipGetPathGradientPresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
398 [DllImport("gdiplus.dll")]
399 static internal extern Status GdipSetPathGradientPresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
400 [DllImport("gdiplus.dll")]
401 static internal extern Status GdipGetPathGradientRect (IntPtr brush, out RectangleF rect);
402 [DllImport("gdiplus.dll")]
403 static internal extern Status GdipGetPathGradientSurroundColorCount (IntPtr brush, out int count);
404 [DllImport("gdiplus.dll")]
405 static internal extern Status GdipGetPathGradientSurroundColorsWithCount (IntPtr brush, int [] color, ref int count);
406 [DllImport("gdiplus.dll")]
407 static internal extern Status GdipSetPathGradientSurroundColorsWithCount (IntPtr brush, int [] color, ref int count);
408 [DllImport("gdiplus.dll")]
409 static internal extern Status GdipGetPathGradientTransform (IntPtr brush, IntPtr matrix);
410 [DllImport("gdiplus.dll")]
411 static internal extern Status GdipSetPathGradientTransform (IntPtr brush, IntPtr matrix);
412 [DllImport("gdiplus.dll")]
413 static internal extern Status GdipGetPathGradientWrapMode (IntPtr brush, out WrapMode wrapMode);
414 [DllImport("gdiplus.dll")]
415 static internal extern Status GdipSetPathGradientWrapMode (IntPtr brush, WrapMode wrapMode);
416 [DllImport("gdiplus.dll")]
417 static internal extern Status GdipSetPathGradientLinearBlend (IntPtr brush, float focus, float scale);
418 [DllImport("gdiplus.dll")]
419 static internal extern Status GdipSetPathGradientSigmaBlend (IntPtr brush, float focus, float scale);
420 [DllImport("gdiplus.dll")]
421 static internal extern Status GdipMultiplyPathGradientTransform (IntPtr texture, IntPtr matrix, MatrixOrder order);
422 [DllImport("gdiplus.dll")]
423 static internal extern Status GdipResetPathGradientTransform (IntPtr brush);
424 [DllImport("gdiplus.dll")]
425 static internal extern Status GdipRotatePathGradientTransform (IntPtr brush, float angle, MatrixOrder order);
426 [DllImport("gdiplus.dll")]
427 static internal extern Status GdipScalePathGradientTransform (IntPtr brush, float sx, float sy, MatrixOrder order);
428 [DllImport("gdiplus.dll")]
429 static internal extern Status GdipTranslatePathGradientTransform (IntPtr brush, float dx, float dy, MatrixOrder order);
431 // LinearGradientBrush functions
432 [DllImport("gdiplus.dll")]
433 static internal extern Status GdipCreateLineBrushI (ref Point point1, ref Point point2, int color1, int color2, WrapMode wrapMode, out IntPtr brush);
434 [DllImport("gdiplus.dll")]
435 static internal extern Status GdipCreateLineBrush (ref PointF point1, ref PointF point2, int color1, int color2, WrapMode wrapMode, out IntPtr brush);
436 [DllImport("gdiplus.dll")]
437 static internal extern Status GdipCreateLineBrushFromRectI (ref Rectangle rect, int color1, int color2, LinearGradientMode linearGradientMode, WrapMode wrapMode, out IntPtr brush);
438 [DllImport("gdiplus.dll")]
439 static internal extern Status GdipCreateLineBrushFromRect (ref RectangleF rect, int color1, int color2, LinearGradientMode linearGradientMode, WrapMode wrapMode, out IntPtr brush);
440 [DllImport("gdiplus.dll")]
441 static internal extern Status GdipCreateLineBrushFromRectWithAngleI (ref Rectangle rect, int color1, int color2, float angle, bool isAngleScaleable, WrapMode wrapMode, out IntPtr brush);
442 [DllImport("gdiplus.dll")]
443 static internal extern Status GdipCreateLineBrushFromRectWithAngle (ref RectangleF rect, int color1, int color2, float angle, bool isAngleScaleable, WrapMode wrapMode, out IntPtr brush);
444 [DllImport("gdiplus.dll")]
445 static internal extern Status GdipGetLineBlendCount (IntPtr brush, out int count);
446 [DllImport("gdiplus.dll")]
447 static internal extern Status GdipSetLineBlend (IntPtr brush, float [] blend, float [] positions, int count);
448 [DllImport("gdiplus.dll")]
449 static internal extern Status GdipGetLineBlend (IntPtr brush, float [] blend, float [] positions, int count);
450 [DllImport("gdiplus.dll")]
451 static internal extern Status GdipSetLineGammaCorrection (IntPtr brush, bool useGammaCorrection);
452 [DllImport("gdiplus.dll")]
453 static internal extern Status GdipGetLineGammaCorrection (IntPtr brush, out bool useGammaCorrection);
454 [DllImport("gdiplus.dll")]
455 static internal extern Status GdipGetLinePresetBlendCount (IntPtr brush, out int count);
456 [DllImport("gdiplus.dll")]
457 static internal extern Status GdipSetLinePresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
458 [DllImport("gdiplus.dll")]
459 static internal extern Status GdipGetLinePresetBlend (IntPtr brush, int [] blend, float [] positions, int count);
460 [DllImport("gdiplus.dll")]
461 static internal extern Status GdipSetLineColors (IntPtr brush, int color1, int color2);
462 [DllImport("gdiplus.dll")]
463 static internal extern Status GdipGetLineColors (IntPtr brush, int [] colors);
464 [DllImport("gdiplus.dll")]
465 static internal extern Status GdipGetLineRectI (IntPtr brush, out Rectangle rect);
466 [DllImport("gdiplus.dll")]
467 static internal extern Status GdipGetLineRect (IntPtr brush, out RectangleF rect);
468 [DllImport("gdiplus.dll")]
469 static internal extern Status GdipSetLineTransform (IntPtr brush, IntPtr matrix);
470 [DllImport("gdiplus.dll")]
471 static internal extern Status GdipGetLineTransform (IntPtr brush, IntPtr matrix);
472 [DllImport("gdiplus.dll")]
473 static internal extern Status GdipSetLineWrapMode (IntPtr brush, WrapMode wrapMode);
474 [DllImport("gdiplus.dll")]
475 static internal extern Status GdipGetLineWrapMode (IntPtr brush, out WrapMode wrapMode);
476 [DllImport("gdiplus.dll")]
477 static internal extern Status GdipSetLineLinearBlend (IntPtr brush, float focus, float scale);
478 [DllImport("gdiplus.dll")]
479 static internal extern Status GdipSetLineSigmaBlend (IntPtr brush, float focus, float scale);
480 [DllImport("gdiplus.dll")]
481 static internal extern Status GdipMultiplyLineTransform (IntPtr brush, IntPtr matrix, MatrixOrder order);
482 [DllImport("gdiplus.dll")]
483 static internal extern Status GdipResetLineTransform (IntPtr brush);
484 [DllImport("gdiplus.dll")]
485 static internal extern Status GdipRotateLineTransform (IntPtr brush, float angle, MatrixOrder order);
486 [DllImport("gdiplus.dll")]
487 static internal extern Status GdipScaleLineTransform (IntPtr brush, float sx, float sy, MatrixOrder order);
488 [DllImport("gdiplus.dll")]
489 static internal extern Status GdipTranslateLineTransform (IntPtr brush, float dx, float dy, MatrixOrder order);
491 // Graphics functions
492 [DllImport("gdiplus.dll")]
493 static internal extern Status GdipCreateFromHDC(IntPtr hDC, out IntPtr graphics);
494 [DllImport("gdiplus.dll")]
495 static internal extern Status GdipDeleteGraphics(IntPtr graphics);
496 [DllImport("gdiplus.dll")]
497 static internal extern Status GdipRestoreGraphics(IntPtr graphics, uint graphicsState);
498 [DllImport("gdiplus.dll")]
499 static internal extern Status GdipSaveGraphics(IntPtr graphics, out uint state);
500 [DllImport("gdiplus.dll")]
501 static internal extern Status GdipMultiplyWorldTransform (IntPtr graphics, IntPtr matrix, MatrixOrder order);
503 [DllImport("gdiplus.dll")]
504 static internal extern Status GdipRotateWorldTransform(IntPtr graphics, float angle, MatrixOrder order);
505 [DllImport("gdiplus.dll")]
506 static internal extern Status GdipTranslateWorldTransform(IntPtr graphics, float dx, float dy, MatrixOrder order);
507 [DllImport("gdiplus.dll")]
508 static internal extern Status GdipDrawArc (IntPtr graphics, IntPtr pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
509 [DllImport("gdiplus.dll")]
510 static internal extern Status GdipDrawArcI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height, float startAngle, float sweepAngle);
511 [DllImport("gdiplus.dll")]
512 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);
513 [DllImport("gdiplus.dll")]
514 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);
515 [DllImport("gdiplus.dll")]
516 static internal extern Status GdipDrawEllipseI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
517 [DllImport("gdiplus.dll")]
518 static internal extern Status GdipDrawEllipse (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
519 [DllImport("gdiplus.dll")]
520 static internal extern Status GdipDrawLine (IntPtr graphics, IntPtr pen, float x1, float y1, float x2, float y2);
521 [DllImport("gdiplus.dll")]
522 static internal extern Status GdipDrawLineI (IntPtr graphics, IntPtr pen, int x1, int y1, int x2, int y2);
523 [DllImport ("gdiplus.dll")]
524 static internal extern Status GdipDrawLines (IntPtr graphics, IntPtr pen, PointF [] points, int count);
525 [DllImport ("gdiplus.dll")]
526 static internal extern Status GdipDrawLinesI (IntPtr graphics, IntPtr pen, Point [] points, int count);
527 [DllImport ("gdiplus.dll")]
528 static internal extern Status GdipDrawPath (IntPtr graphics, IntPtr pen, IntPtr path);
529 [DllImport ("gdiplus.dll")]
530 static internal extern Status GdipDrawPie (IntPtr graphics, IntPtr pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
531 [DllImport ("gdiplus.dll")]
532 static internal extern Status GdipDrawPieI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height, float startAngle, float sweepAngle);
533 [DllImport ("gdiplus.dll")]
534 static internal extern Status GdipDrawPolygon (IntPtr graphics, IntPtr pen, PointF [] points, int count);
535 [DllImport ("gdiplus.dll")]
536 static internal extern Status GdipDrawPolygonI (IntPtr graphics, IntPtr pen, Point [] points, int count);
537 [DllImport ("gdiplus.dll")]
538 static internal extern Status GdipDrawRectangle (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
539 [DllImport ("gdiplus.dll")]
540 static internal extern Status GdipDrawRectangleI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
541 [DllImport ("gdiplus.dll")]
542 static internal extern Status GdipDrawRectangles (IntPtr graphics, IntPtr pen, RectangleF [] rects, int count);
543 [DllImport ("gdiplus.dll")]
544 static internal extern Status GdipDrawRectanglesI (IntPtr graphics, IntPtr pen, Rectangle [] rects, int count);
545 [DllImport("gdiplus.dll")]
546 static internal extern Status GdipFillEllipseI (IntPtr graphics, IntPtr pen, int x, int y, int width, int height);
547 [DllImport("gdiplus.dll")]
548 static internal extern Status GdipFillEllipse (IntPtr graphics, IntPtr pen, float x, float y, float width, float height);
549 [DllImport ("gdiplus.dll")]
550 static internal extern Status GdipFillPolygon (IntPtr graphics, IntPtr brush, PointF [] points, int count, FillMode fillMode);
551 [DllImport ("gdiplus.dll")]
552 static internal extern Status GdipFillPolygonI (IntPtr graphics, IntPtr brush, Point [] points, int count, FillMode fillMode);
553 [DllImport ("gdiplus.dll")]
554 static internal extern Status GdipFillPolygon2 (IntPtr graphics, IntPtr brush, PointF [] points, int count);
555 [DllImport ("gdiplus.dll")]
556 static internal extern Status GdipFillPolygon2I (IntPtr graphics, IntPtr brush, Point [] points, int count);
557 [DllImport("gdiplus.dll")]
558 static internal extern Status GdipFillRectangle (IntPtr graphics, IntPtr brush, float x1, float y1, float x2, float y2);
559 [DllImport("gdiplus.dll")]
560 static internal extern Status GdipFillRectangleI (IntPtr graphics, IntPtr brush, int x1, int y1, int x2, int y2);
561 [DllImport("gdiplus.dll")]
562 static internal extern Status GdipFillRectangles (IntPtr graphics, IntPtr brush, RectangleF [] rects, int count);
563 [DllImport("gdiplus.dll")]
564 static internal extern Status GdipFillRectanglesI (IntPtr graphics, IntPtr brush, Rectangle [] rects, int count);
565 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
566 static internal extern Status GdipDrawString (IntPtr graphics, string text, int len, IntPtr font, ref RectangleF rc, IntPtr format, IntPtr brush);
567 [DllImport("gdiplus.dll")]
568 static internal extern Status GdipGetDC (IntPtr graphics, out IntPtr hdc);
569 [DllImport("gdiplus.dll")]
570 static internal extern Status GdipReleaseDC (IntPtr graphics, IntPtr hdc);
571 [DllImport("gdiplus.dll")]
572 static internal extern Status GdipDrawImageRectI (IntPtr graphics, IntPtr image, int x, int y, int width, int height);
573 [DllImport ("gdiplus.dll")]
574 static internal extern Status GdipGetRenderingOrigin (IntPtr graphics, out int x, out int y);
575 [DllImport ("gdiplus.dll")]
576 static internal extern Status GdipSetRenderingOrigin (IntPtr graphics, int x, int y);
577 [DllImport("gdiplus.dll")]
578 internal static extern Status GdipCloneBitmapArea (float x, float y, float width, float height, PixelFormat format, IntPtr original, out IntPtr bitmap);
579 [DllImport("gdiplus.dll")]
580 internal static extern Status GdipCloneBitmapAreaI (int x, int y, int width, int height, PixelFormat format, IntPtr original, out IntPtr bitmap);
581 [DllImport("gdiplus.dll")]
582 internal static extern Status GdipResetWorldTransform (IntPtr graphics);
583 [DllImport("gdiplus.dll")]
584 internal static extern Status GdipSetWorldTransform (IntPtr graphics, IntPtr matrix);
585 [DllImport("gdiplus.dll")]
586 internal static extern Status GdipGetWorldTransform (IntPtr graphics, IntPtr matrix);
587 [DllImport("gdiplus.dll")]
588 internal static extern Status GdipScaleWorldTransform (IntPtr graphics, float sx, float sy, MatrixOrder order);
589 [DllImport("gdiplus.dll")]
590 internal static extern Status GdipGraphicsClear(IntPtr graphics, int argb);
591 [DllImport("gdiplus.dll")]
592 internal static extern Status GdipDrawClosedCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
593 [DllImport("gdiplus.dll")]
594 internal static extern Status GdipDrawClosedCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
595 [DllImport("gdiplus.dll")]
596 internal static extern Status GdipDrawClosedCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
597 [DllImport("gdiplus.dll")]
598 internal static extern Status GdipDrawClosedCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
599 [DllImport("gdiplus.dll")]
600 internal static extern Status GdipDrawCurve(IntPtr graphics, IntPtr pen, PointF [] points, int count);
601 [DllImport("gdiplus.dll")]
602 internal static extern Status GdipDrawCurveI(IntPtr graphics, IntPtr pen, Point [] points, int count);
603 [DllImport("gdiplus.dll")]
604 internal static extern Status GdipDrawCurve2(IntPtr graphics, IntPtr pen, PointF [] points, int count, float tension);
605 [DllImport("gdiplus.dll")]
606 internal static extern Status GdipDrawCurve2I(IntPtr graphics, IntPtr pen, Point [] points, int count, float tension);
607 [DllImport("gdiplus.dll")]
608 internal static extern Status GdipDrawCurve3(IntPtr graphics, IntPtr pen, PointF [] points, int count, int offset, int numberOfSegments, float tension);
609 [DllImport("gdiplus.dll")]
610 internal static extern Status GdipDrawCurve3I(IntPtr graphics, IntPtr pen, Point [] points, int count, int offset, int numberOfSegments, float tension);
611 [DllImport("gdiplus.dll")]
612 internal static extern Status GdipSetClipRect(IntPtr graphics, float x, float y, float width, float height, CombineMode combineMode);
613 [DllImport("gdiplus.dll")]
614 internal static extern Status GdipSetClipRectI(IntPtr graphics, int x, int y, int width, int height, CombineMode combineMode);
615 [DllImport("gdiplus.dll")]
616 internal static extern Status GdipSetClipPath(IntPtr graphics, IntPtr path, CombineMode combineMode);
617 [DllImport("gdiplus.dll")]
618 internal static extern Status GdipSetClipRegion(IntPtr graphics, IntPtr region, CombineMode combineMode);
619 [DllImport("gdiplus.dll")]
620 internal static extern Status GdipSetClipGraphics(IntPtr graphics, IntPtr srcgraphics, CombineMode combineMode);
621 [DllImport("gdiplus.dll")]
622 internal static extern Status GdipResetClip(IntPtr graphics);
623 [DllImport("gdiplus.dll")]
624 internal static extern Status GdipEndContainer(IntPtr graphics, int state);
625 [DllImport("gdiplus.dll")]
626 internal static extern Status GdipGetClip (IntPtr graphics, IntPtr region);
628 [DllImport("gdiplus.dll")]
629 internal static extern Status GdipFillClosedCurve(IntPtr graphics, IntPtr brush, PointF [] points, int count);
631 [DllImport("gdiplus.dll")]
632 internal static extern Status GdipFillClosedCurveI(IntPtr graphics, IntPtr brush, Point [] points, int count);
634 [DllImport("gdiplus.dll")]
635 internal static extern Status GdipFillClosedCurve2(IntPtr graphics, IntPtr brush,
636 PointF [] points, int count, float tension, FillMode fillMode);
638 [DllImport("gdiplus.dll")]
639 internal static extern Status GdipFillClosedCurve2I(IntPtr graphics, IntPtr brush,
640 Point [] points, int count, float tension, FillMode fillMode);
642 [DllImport("gdiplus.dll")]
643 internal static extern Status GdipFillPie(IntPtr graphics, IntPtr brush, float x, float y,
644 float width, float height, float startAngle, float sweepAngle);
646 [DllImport("gdiplus.dll")]
647 internal static extern Status GdipFillPieI(IntPtr graphics, IntPtr brush, int x, int y,
648 int width, int height, float startAngle, float sweepAngle);
650 [DllImport("gdiplus.dll")]
651 internal static extern Status GdipFillPath(IntPtr graphics, IntPtr brush, IntPtr path);
653 [DllImport("gdiplus.dll")]
654 internal static extern Status GdipGetNearestColor(IntPtr graphics, out int argb);
656 [DllImport("gdiplus.dll")]
657 internal static extern Status GdipIsVisiblePoint(IntPtr graphics, float x, float y, out bool result);
659 [DllImport("gdiplus.dll")]
660 internal static extern Status GdipIsVisiblePointI(IntPtr graphics, int x, int y, out bool result);
662 [DllImport("gdiplus.dll")]
663 internal static extern Status GdipIsVisibleRect(IntPtr graphics, float x, float y,
664 float width, float height, out bool result);
666 [DllImport("gdiplus.dll")]
667 internal static extern Status GdipIsVisibleRectI(IntPtr graphics, int x, int y,
668 int width, int height, out bool result);
670 [DllImport("gdiplus.dll")]
671 internal static extern Status GdipTransformPoints(IntPtr graphics, CoordinateSpace destSpace,
672 CoordinateSpace srcSpace, IntPtr points, int count);
674 [DllImport("gdiplus.dll")]
675 internal static extern Status GdipTransformPointsI(IntPtr graphics, CoordinateSpace destSpace,
676 CoordinateSpace srcSpace, IntPtr points, int count);
678 [DllImport("gdiplus.dll")]
679 internal static extern Status GdipTranslateClip(IntPtr graphics, float dx, float dy);
680 [DllImport("gdiplus.dll")]
681 internal static extern Status GdipTranslateClipI(IntPtr graphics, int dx, int dy);
682 [DllImport("gdiplus.dll")]
683 internal static extern Status GdipGetClipBounds(IntPtr graphics, out RectangleF rect);
684 [DllImport("gdiplus.dll")]
685 internal static extern Status GdipSetCompositingMode(IntPtr graphics, CompositingMode compositingMode);
686 [DllImport("gdiplus.dll")]
687 internal static extern Status GdipGetCompositingMode(IntPtr graphics, out CompositingMode compositingMode);
688 [DllImport("gdiplus.dll")]
689 internal static extern Status GdipSetCompositingQuality(IntPtr graphics, CompositingQuality compositingQuality);
690 [DllImport("gdiplus.dll")]
691 internal static extern Status GdipGetCompositingQuality(IntPtr graphics, out CompositingQuality compositingQuality);
692 [DllImport("gdiplus.dll")]
693 internal static extern Status GdipSetInterpolationMode(IntPtr graphics, InterpolationMode interpolationMode);
694 [DllImport("gdiplus.dll")]
695 internal static extern Status GdipGetInterpolationMode(IntPtr graphics, out InterpolationMode interpolationMode);
696 [DllImport("gdiplus.dll")]
697 internal static extern Status GdipGetDpiX(IntPtr graphics, out float dpi);
698 [DllImport("gdiplus.dll")]
699 internal static extern Status GdipGetDpiY(IntPtr graphics, out float dpi);
700 [DllImport("gdiplus.dll")]
701 internal static extern Status GdipIsClipEmpty(IntPtr graphics, out bool result);
702 [DllImport("gdiplus.dll")]
703 internal static extern Status GdipIsVisibleClipEmpty(IntPtr graphics, out bool result);
704 [DllImport("gdiplus.dll")]
705 internal static extern Status GdipGetPageUnit(IntPtr graphics, out GraphicsUnit unit);
706 [DllImport("gdiplus.dll")]
707 internal static extern Status GdipGetPageScale(IntPtr graphics, out float scale);
708 [DllImport("gdiplus.dll")]
709 internal static extern Status GdipSetPageUnit(IntPtr graphics, GraphicsUnit unit);
710 [DllImport("gdiplus.dll")]
711 internal static extern Status GdipSetPageScale(IntPtr graphics, float scale);
712 [DllImport("gdiplus.dll")]
713 internal static extern Status GdipSetPixelOffsetMode(IntPtr graphics, PixelOffsetMode pixelOffsetMode);
714 [DllImport("gdiplus.dll")]
715 internal static extern Status GdipGetPixelOffsetMode(IntPtr graphics, out PixelOffsetMode pixelOffsetMode);
716 [DllImport("gdiplus.dll")]
717 internal static extern Status GdipSetSmoothingMode(IntPtr graphics, SmoothingMode smoothingMode);
718 [DllImport("gdiplus.dll")]
719 internal static extern Status GdipGetSmoothingMode(IntPtr graphics, out SmoothingMode smoothingMode);
720 [DllImport("gdiplus.dll")]
721 internal static extern Status GdipSetTextContrast(IntPtr graphics, int contrast);
722 [DllImport("gdiplus.dll")]
723 internal static extern Status GdipGetTextContrast(IntPtr graphics, out int contrast);
724 [DllImport("gdiplus.dll")]
725 internal static extern Status GdipSetTextRenderingHint(IntPtr graphics, TextRenderingHint mode);
726 [DllImport("gdiplus.dll")]
727 internal static extern Status GdipGetTextRenderingHint(IntPtr graphics, out TextRenderingHint mode);
728 [DllImport("gdiplus.dll")]
729 internal static extern Status GdipGetVisibleClipBounds(IntPtr graphics, out RectangleF rect);
731 [DllImport("gdiplus.dll")]
732 internal static extern Status GdipFlush(IntPtr graphics, FlushIntention intention);
736 [DllImport("gdiplus.dll")]
737 internal static extern Status GdipCreatePen1 (int argb, float width, Unit unit, out IntPtr pen);
738 [DllImport("gdiplus.dll")]
739 internal static extern Status GdipCreatePen2 (IntPtr brush, float width, Unit unit, out IntPtr pen);
740 [DllImport("gdiplus.dll")]
741 internal static extern Status GdipClonePen (IntPtr pen, out IntPtr clonepen);
742 [DllImport("gdiplus.dll")]
743 internal static extern Status GdipDeletePen(IntPtr pen);
744 [DllImport("gdiplus.dll")]
745 internal static extern Status GdipSetPenBrushFill (IntPtr pen, IntPtr brush);
746 [DllImport("gdiplus.dll")]
747 internal static extern Status GdipGetPenBrushFill (IntPtr pen, out IntPtr brush);
748 [DllImport("gdiplus.dll")]
749 internal static extern Status GdipGetPenFillType (IntPtr pen, out PenType type);
750 [DllImport("gdiplus.dll")]
751 internal static extern Status GdipSetPenColor (IntPtr pen, int color);
752 [DllImport("gdiplus.dll")]
753 internal static extern Status GdipGetPenColor (IntPtr pen, out int color);
754 [DllImport("gdiplus.dll")]
755 internal static extern Status GdipSetPenCompoundArray (IntPtr pen, float[] dash, int count);
756 [DllImport("gdiplus.dll")]
757 internal static extern Status GdipGetPenCompoundArray (IntPtr pen, float[] dash, int count);
758 [DllImport("gdiplus.dll")]
759 internal static extern Status GdipGetPenCompoundCount (IntPtr pen, out int count);
760 [DllImport("gdiplus.dll")]
761 internal static extern Status GdipSetPenDashCap197819 (IntPtr pen, DashCap dashCap);
762 [DllImport("gdiplus.dll")]
763 internal static extern Status GdipGetPenDashCap197819 (IntPtr pen, out DashCap dashCap);
764 [DllImport("gdiplus.dll")]
765 internal static extern Status GdipSetPenDashStyle (IntPtr pen, DashStyle dashStyle);
766 [DllImport("gdiplus.dll")]
767 internal static extern Status GdipGetPenDashStyle (IntPtr pen, out DashStyle dashStyle);
768 [DllImport("gdiplus.dll")]
769 internal static extern Status GdipSetPenDashOffset (IntPtr pen, float offset);
770 [DllImport("gdiplus.dll")]
771 internal static extern Status GdipGetPenDashOffset (IntPtr pen, out float offset);
772 [DllImport("gdiplus.dll")]
773 internal static extern Status GdipGetPenDashCount (IntPtr pen, out int count);
774 [DllImport("gdiplus.dll")]
775 internal static extern Status GdipSetPenDashArray (IntPtr pen, float[] dash, int count);
776 [DllImport("gdiplus.dll")]
777 internal static extern Status GdipGetPenDashArray (IntPtr pen, float[] dash, int count);
778 [DllImport("gdiplus.dll")]
779 internal static extern Status GdipSetPenMiterLimit (IntPtr pen, float miterLimit);
780 [DllImport("gdiplus.dll")]
781 internal static extern Status GdipGetPenMiterLimit (IntPtr pen, out float miterLimit);
782 [DllImport("gdiplus.dll")]
783 internal static extern Status GdipSetPenLineJoin (IntPtr pen, LineJoin lineJoin);
784 [DllImport("gdiplus.dll")]
785 internal static extern Status GdipGetPenLineJoin (IntPtr pen, out LineJoin lineJoin);
786 [DllImport("gdiplus.dll")]
787 internal static extern Status GdipSetPenLineCap197819 (IntPtr pen, LineCap startCap, LineCap endCap, DashCap dashCap);
788 [DllImport("gdiplus.dll")]
789 internal static extern Status GdipSetPenMode (IntPtr pen, PenAlignment alignment);
790 [DllImport("gdiplus.dll")]
791 internal static extern Status GdipGetPenMode (IntPtr pen, out PenAlignment alignment);
792 [DllImport("gdiplus.dll")]
793 internal static extern Status GdipSetPenStartCap (IntPtr pen, LineCap startCap);
794 [DllImport("gdiplus.dll")]
795 internal static extern Status GdipGetPenStartCap (IntPtr pen, out LineCap startCap);
796 [DllImport("gdiplus.dll")]
797 internal static extern Status GdipSetPenEndCap (IntPtr pen, LineCap endCap);
798 [DllImport("gdiplus.dll")]
799 internal static extern Status GdipGetPenEndCap (IntPtr pen, out LineCap endCap);
800 [DllImport("gdiplus.dll")]
801 internal static extern Status GdipSetPenCustomStartCap (IntPtr pen, IntPtr customCap);
802 [DllImport("gdiplus.dll")]
803 internal static extern Status GdipGetPenCustomStartCap (IntPtr pen, out IntPtr customCap);
804 [DllImport("gdiplus.dll")]
805 internal static extern Status GdipSetPenCustomEndCap (IntPtr pen, IntPtr customCap);
806 [DllImport("gdiplus.dll")]
807 internal static extern Status GdipGetPenCustomEndCap (IntPtr pen, out IntPtr customCap);
808 [DllImport("gdiplus.dll")]
809 internal static extern Status GdipSetPenTransform (IntPtr pen, IntPtr matrix);
810 [DllImport("gdiplus.dll")]
811 internal static extern Status GdipGetPenTransform (IntPtr pen, IntPtr matrix);
812 [DllImport("gdiplus.dll")]
813 internal static extern Status GdipSetPenWidth (IntPtr pen, float width);
814 [DllImport("gdiplus.dll")]
815 internal static extern Status GdipGetPenWidth (IntPtr pen, out float width);
816 [DllImport("gdiplus.dll")]
817 internal static extern Status GdipResetPenTransform (IntPtr pen);
818 [DllImport("gdiplus.dll")]
819 internal static extern Status GdipMultiplyPenTransform (IntPtr pen, IntPtr matrix, MatrixOrder order);
820 [DllImport("gdiplus.dll")]
821 internal static extern Status GdipRotatePenTransform (IntPtr pen, float angle, MatrixOrder order);
822 [DllImport("gdiplus.dll")]
823 internal static extern Status GdipScalePenTransform (IntPtr pen, float sx, float sy, MatrixOrder order);
824 [DllImport("gdiplus.dll")]
825 internal static extern Status GdipTranslatePenTransform (IntPtr pen, float dx, float dy, MatrixOrder order);
827 // CustomLineCap functions
828 [DllImport("gdiplus.dll")]
829 internal static extern Status GdipCreateCustomLineCap (IntPtr fillPath, IntPtr strokePath, LineCap baseCap, float baseInset, out IntPtr customCap);
830 [DllImport("gdiplus.dll")]
831 internal static extern Status GdipDeleteCustomLineCap (IntPtr customCap);
832 [DllImport("gdiplus.dll")]
833 internal static extern Status GdipCloneCustomLineCap (IntPtr customCap, out IntPtr clonedCap);
834 [DllImport("gdiplus.dll")]
835 internal static extern Status GdipSetCustomLineCapStrokeCaps (IntPtr customCap, LineCap startCap, LineCap endCap);
836 [DllImport("gdiplus.dll")]
837 internal static extern Status GdipGetCustomLineCapStrokeCaps (IntPtr customCap, out LineCap startCap, out LineCap endCap);
838 [DllImport("gdiplus.dll")]
839 internal static extern Status GdipSetCustomLineCapStrokeJoin (IntPtr customCap, LineJoin lineJoin);
840 [DllImport("gdiplus.dll")]
841 internal static extern Status GdipGetCustomLineCapStrokeJoin (IntPtr customCap, out LineJoin lineJoin);
842 [DllImport("gdiplus.dll")]
843 internal static extern Status GdipSetCustomLineCapBaseCap (IntPtr customCap, LineCap baseCap);
844 [DllImport("gdiplus.dll")]
845 internal static extern Status GdipGetCustomLineCapBaseCap (IntPtr customCap, out LineCap baseCap);
846 [DllImport("gdiplus.dll")]
847 internal static extern Status GdipSetCustomLineCapBaseInset (IntPtr customCap, float inset);
848 [DllImport("gdiplus.dll")]
849 internal static extern Status GdipGetCustomLineCapBaseInset (IntPtr customCap, out float inset);
850 [DllImport("gdiplus.dll")]
851 internal static extern Status GdipSetCustomLineCapWidthScale (IntPtr customCap, float widthScale);
852 [DllImport("gdiplus.dll")]
853 internal static extern Status GdipGetCustomLineCapWidthScale (IntPtr customCap, out float widthScale);
855 // AdjustableArrowCap functions
856 [DllImport("gdiplus.dll")]
857 internal static extern Status GdipCreateAdjustableArrowCap (float height, float width, bool isFilled, out IntPtr arrowCap);
858 [DllImport("gdiplus.dll")]
859 internal static extern Status GdipSetAdjustableArrowCapHeight (IntPtr arrowCap, float height);
860 [DllImport("gdiplus.dll")]
861 internal static extern Status GdipGetAdjustableArrowCapHeight (IntPtr arrowCap, out float height);
862 [DllImport("gdiplus.dll")]
863 internal static extern Status GdipSetAdjustableArrowCapWidth (IntPtr arrowCap, float width);
864 [DllImport("gdiplus.dll")]
865 internal static extern Status GdipGetAdjustableArrowCapWidth (IntPtr arrowCap, out float width);
866 [DllImport("gdiplus.dll")]
867 internal static extern Status GdipSetAdjustableArrowCapMiddleInset (IntPtr arrowCap, float middleInset);
868 [DllImport("gdiplus.dll")]
869 internal static extern Status GdipGetAdjustableArrowCapMiddleInset (IntPtr arrowCap, out float middleInset);
870 [DllImport("gdiplus.dll")]
871 internal static extern Status GdipSetAdjustableArrowCapFillState (IntPtr arrowCap, bool isFilled);
872 [DllImport("gdiplus.dll")]
873 internal static extern Status GdipGetAdjustableArrowCapFillState (IntPtr arrowCap, out bool isFilled);
876 [DllImport("gdiplus.dll")]
877 internal static extern Status GdipCreateFromHWND (IntPtr hwnd, out IntPtr graphics);
879 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
880 internal static extern Status GdipMeasureString(IntPtr graphics, string str, int length, IntPtr font,
881 ref RectangleF layoutRect, IntPtr stringFormat, out RectangleF boundingBox, out int codepointsFitted,
882 out int linesFilled);
884 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
885 internal static extern Status GdipMeasureCharacterRanges (IntPtr graphics, string str, int length, IntPtr font,
886 ref RectangleF layoutRect, IntPtr stringFormat, int regcount, out IntPtr regions);
888 [DllImport("gdiplus.dll")]
889 internal static extern Status GdipSetStringFormatMeasurableCharacterRanges (IntPtr native,
890 int cnt, CharacterRange [] range);
892 [DllImport("gdiplus.dll")]
893 internal static extern Status GdipGetStringFormatMeasurableCharacterRangeCount (IntPtr native,
897 [DllImport("gdiplus.dll")]
898 internal static extern Status GdipCreateBitmapFromScan0 (int width, int height, int stride, PixelFormat format, IntPtr scan0, out IntPtr bmp);
900 [DllImport("gdiplus.dll")]
901 internal static extern Status GdipCreateBitmapFromGraphics (int width, int height, IntPtr target, out IntPtr bitmap);
903 [DllImport("gdiplus.dll")]
904 internal static extern Status GdipBitmapLockBits (IntPtr bmp, ref Rectangle rc, ImageLockMode flags, PixelFormat format, [In, Out] BitmapData bmpData);
906 [DllImport("gdiplus.dll")]
907 internal static extern Status GdipBitmapSetResolution(IntPtr bmp, float xdpi, float ydpi);
909 [DllImport("gdiplus.dll")]
910 internal static extern Status GdipBitmapUnlockBits (IntPtr bmp, [In,Out] BitmapData bmpData);
912 [DllImport("gdiplus.dll")]
913 internal static extern Status GdipBitmapGetPixel (IntPtr bmp, int x, int y, out int argb);
915 [DllImport("gdiplus.dll")]
916 internal static extern Status GdipBitmapSetPixel (IntPtr bmp, int x, int y, int argb);
919 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
920 internal static extern Status GdipLoadImageFromFile ( [MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr image );
922 // Stream functions for Win32 (original Win32 ones)
923 [DllImport("gdiplus.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]
924 internal static extern Status GdipLoadImageFromStream([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, out IntPtr image);
926 [DllImport("gdiplus.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]
927 internal static extern Status GdipSaveImageToStream(HandleRef image, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ComIStreamMarshaler))] IStream stream, [In()] ref Guid clsidEncoder, HandleRef encoderParams);
930 [DllImport("gdiplus.dll")]
931 internal static extern Status GdipCloneImage(IntPtr image, out IntPtr imageclone);
933 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
934 internal static extern Status GdipLoadImageFromFileICM ( [MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr image );
936 [DllImport("gdiplus.dll")]
937 internal static extern Status GdipCreateBitmapFromHBITMAP ( IntPtr hBitMap, IntPtr gdiPalette, out IntPtr image );
939 [DllImport("gdiplus.dll")]
940 internal static extern Status GdipDisposeImage ( IntPtr image );
942 [DllImport("gdiplus.dll")]
943 internal static extern Status GdipGetImageFlags(IntPtr image, out int flag);
945 [DllImport("gdiplus.dll")]
946 internal static extern Status GdipImageGetFrameDimensionsCount ( IntPtr image, out uint count );
948 [DllImport("gdiplus.dll")]
949 internal static extern Status GdipImageGetFrameDimensionsList ( IntPtr image, [Out] Guid [] dimensionIDs, uint count );
951 [DllImport("gdiplus.dll")]
952 internal static extern Status GdipGetImageHeight (IntPtr image, out int height);
954 [DllImport("gdiplus.dll")]
955 internal static extern Status GdipGetImageHorizontalResolution ( IntPtr image, out float resolution );
957 [DllImport("gdiplus.dll")]
958 internal static extern Status GdipGetImagePaletteSize ( IntPtr image, out int size );
960 [DllImport("gdiplus.dll")]
961 internal static extern Status GdipGetImagePalette (IntPtr image, IntPtr palette, int size);
963 [DllImport("gdiplus.dll")]
964 internal static extern Status GdipSetImagePalette (IntPtr image, IntPtr palette);
966 [DllImport("gdiplus.dll")]
967 internal static extern Status GdipGetImageDimension ( IntPtr image, out float width, out float height );
969 [DllImport("gdiplus.dll")]
970 internal static extern Status GdipGetImagePixelFormat ( IntPtr image, out PixelFormat format );
972 [DllImport("gdiplus.dll")]
973 internal static extern Status GdipGetPropertyCount (IntPtr image, out uint propNumbers);
975 [DllImport("gdiplus.dll")]
976 internal static extern Status GdipGetPropertyIdList (IntPtr image, uint propNumbers, [Out] int [] list);
978 [DllImport("gdiplus.dll")]
979 internal static extern Status GdipGetPropertySize (IntPtr image, out int bufferSize, out int propNumbers);
981 [DllImport("gdiplus.dll")]
982 internal static extern Status GdipGetAllPropertyItems (IntPtr image, int bufferSize, int propNumbers, IntPtr items);
984 [DllImport("gdiplus.dll")]
985 internal static extern Status GdipGetImageRawFormat ( IntPtr image, out Guid format );
987 [DllImport("gdiplus.dll")]
988 internal static extern Status GdipGetImageVerticalResolution ( IntPtr image, out float resolution );
990 [DllImport("gdiplus.dll")]
991 internal static extern Status GdipGetImageWidth ( IntPtr image, out int width);
993 [DllImport("gdiplus.dll")]
994 internal static extern Status GdipGetImageBounds ( IntPtr image, out RectangleF source, ref GraphicsUnit unit );
996 [DllImport("gdiplus.dll")]
997 internal static extern Status GdipGetEncoderParameterListSize ( IntPtr image, ref Guid encoder, out uint size );
999 [DllImport("gdiplus.dll")]
1000 internal static extern Status GdipGetEncoderParameterList ( IntPtr image, ref Guid encoder, uint size, IntPtr buffer );
1002 [DllImport("gdiplus.dll")]
1003 internal static extern Status GdipImageGetFrameCount (IntPtr image, ref Guid guidDimension, out int count );
1005 [DllImport("gdiplus.dll")]
1006 internal static extern Status GdipImageSelectActiveFrame (IntPtr image, ref Guid guidDimension, int frameIndex);
1008 [DllImport("gdiplus.dll")]
1009 internal static extern Status GdipGetPropertyItemSize (IntPtr image, int propertyID, out int propertySize);
1011 [DllImport("gdiplus.dll")]
1012 internal static extern Status GdipGetPropertyItem (IntPtr image, int propertyID, int propertySize, IntPtr buffer);
1014 [DllImport("gdiplus.dll")]
1015 internal static extern Status GdipRemovePropertyItem (IntPtr image, int propertyId);
1017 [DllImport("gdiplus.dll")]
1018 internal static extern Status GdipSetPropertyItem (IntPtr image, IntPtr propertyItem);
1020 [DllImport("gdiplus.dll")]
1021 internal static extern Status GdipGetImageThumbnail ( IntPtr image, uint width, uint height, out IntPtr thumbImage, IntPtr callback, IntPtr callBackData );
1023 [DllImport("gdiplus.dll")]
1024 internal static extern Status GdipImageRotateFlip ( IntPtr image, RotateFlipType rotateFlipType );
1026 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
1027 internal static extern Status GdipSaveImageToFile (IntPtr image, string filename, ref Guid encoderClsID, IntPtr encoderParameters);
1029 [DllImport("gdiplus.dll")]
1030 internal static extern Status GdipSaveAdd ( IntPtr image, IntPtr encoderParameters );
1032 [DllImport("gdiplus.dll")]
1033 internal static extern Status GdipSaveAddImage (IntPtr image, IntPtr imagenew, IntPtr encoderParameters);
1035 [DllImport("gdiplus.dll")]
1036 internal static extern Status GdipDrawImageI (IntPtr graphics, IntPtr image, int x, int y);
1037 [DllImport("gdiplus.dll")]
1038 internal static extern Status GdipGetImageGraphicsContext (IntPtr image, out IntPtr graphics);
1039 [DllImport("gdiplus.dll")]
1040 internal static extern Status GdipDrawImage (IntPtr graphics, IntPtr image, float x, float y);
1041 [DllImport("gdiplus.dll")]
1042 internal static extern Status GdipBeginContainer (IntPtr graphics, RectangleF dstrect,
1043 RectangleF srcrect, GraphicsUnit unit, out int state);
1045 [DllImport("gdiplus.dll")]
1046 internal static extern Status GdipBeginContainerI (IntPtr graphics, Rectangle dstrect,
1047 Rectangle srcrect, GraphicsUnit unit, out int state);
1049 [DllImport("gdiplus.dll")]
1050 internal static extern Status GdipBeginContainer2 (IntPtr graphics, out int state);
1052 [DllImport("gdiplus.dll")]
1053 internal static extern Status GdipDrawImagePoints (IntPtr graphics, IntPtr image, PointF [] destPoints, int count);
1056 [DllImport("gdiplus.dll")]
1057 internal static extern Status GdipDrawImagePointsI (IntPtr graphics, IntPtr image, Point [] destPoints, int count);
1059 [DllImport("gdiplus.dll")]
1060 internal static extern Status GdipDrawImageRectRectI (IntPtr graphics, IntPtr image,
1061 int dstx, int dsty, int dstwidth, int dstheight,
1062 int srcx, int srcy, int srcwidth, int srcheight,
1063 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1065 [DllImport("gdiplus.dll")]
1066 internal static extern Status GdipDrawImageRectRect (IntPtr graphics, IntPtr image,
1067 float dstx, float dsty, float dstwidth, float dstheight,
1068 float srcx, float srcy, float srcwidth, float srcheight,
1069 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1071 [DllImport("gdiplus.dll")]
1072 internal static extern Status GdipDrawImagePointsRectI (IntPtr graphics, IntPtr image,
1073 Point [] destPoints, int count, int srcx, int srcy, int srcwidth, int srcheight,
1074 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1076 [DllImport("gdiplus.dll")]
1077 internal static extern Status GdipDrawImagePointsRect (IntPtr graphics, IntPtr image,
1078 PointF [] destPoints, int count, float srcx, float srcy, float srcwidth, float srcheight,
1079 GraphicsUnit srcUnit, IntPtr imageattr, Graphics.DrawImageAbort callback, IntPtr callbackData);
1081 [DllImport("gdiplus.dll")]
1082 internal static extern Status GdipDrawImageRect(IntPtr graphics, IntPtr image, float x, float y, float width, float height);
1083 [DllImport("gdiplus.dll")]
1084 internal static extern Status GdipDrawImagePointRect(IntPtr graphics, IntPtr image, float x,
1085 float y, float srcx, float srcy, float srcwidth, float srcheight, GraphicsUnit srcUnit);
1087 [DllImport("gdiplus.dll")]
1088 internal static extern Status GdipDrawImagePointRectI(IntPtr graphics, IntPtr image, int x,
1089 int y, int srcx, int srcy, int srcwidth,
1090 int srcheight, GraphicsUnit srcUnit);
1092 [DllImport("gdiplus.dll")]
1093 internal static extern Status GdipCreateStringFormat(StringFormatFlags formatAttributes, int language, out IntPtr native);
1095 [DllImport("gdiplus.dll")]
1096 internal static extern Status GdipCreateHBITMAPFromBitmap (IntPtr bmp, out IntPtr HandleBmp, int clrbackground);
1098 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
1099 internal static extern Status GdipCreateBitmapFromFile ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr bitmap);
1101 [DllImport("gdiplus.dll", CharSet=CharSet.Auto)]
1102 internal static extern Status GdipCreateBitmapFromFileICM ([MarshalAs (UnmanagedType.LPWStr)] string filename, out IntPtr bitmap);
1104 [DllImport("gdiplus.dll")]
1105 internal static extern Status GdipCreateHICONFromBitmap (IntPtr bmp, out IntPtr HandleIcon);
1107 [DllImport("gdiplus.dll")]
1108 internal static extern Status GdipCreateBitmapFromHICON (IntPtr hicon, out IntPtr bitmap);
1110 [DllImport("gdiplus.dll")]
1111 internal static extern Status GdipCreateBitmapFromResource (IntPtr hInstance,
1112 string lpBitmapName, out IntPtr bitmap);
1115 [DllImport ("gdiplus.dll")]
1116 internal static extern Status GdipCreateMatrix (out IntPtr matrix);
1117 [DllImport ("gdiplus.dll")]
1118 internal static extern Status GdipCreateMatrix2 (float m11, float m12, float m21, float m22, float dx, float dy, out IntPtr matrix);
1119 [DllImport ("gdiplus.dll")]
1120 internal static extern Status GdipCreateMatrix3 (RectangleF rect, PointF [] dstplg, out IntPtr matrix);
1121 [DllImport ("gdiplus.dll")]
1122 internal static extern Status GdipCreateMatrix3I (Rectangle rect, Point [] dstplg, out IntPtr matrix);
1123 [DllImport ("gdiplus.dll")]
1124 internal static extern Status GdipDeleteMatrix (IntPtr matrix);
1126 [DllImport ("gdiplus.dll")]
1127 internal static extern Status GdipCloneMatrix (IntPtr matrix, out IntPtr cloneMatrix);
1128 [DllImport ("gdiplus.dll")]
1129 internal static extern Status GdipSetMatrixElements (IntPtr matrix, float m11, float m12, float m21, float m22, float dx, float dy);
1130 [DllImport ("gdiplus.dll")]
1131 internal static extern Status GdipGetMatrixElements (IntPtr matrix, IntPtr matrixOut);
1132 [DllImport ("gdiplus.dll")]
1133 internal static extern Status GdipMultiplyMatrix (IntPtr matrix, IntPtr matrix2, MatrixOrder order);
1134 [DllImport ("gdiplus.dll")]
1135 internal static extern Status GdipTranslateMatrix (IntPtr matrix, float offsetX, float offsetY, MatrixOrder order);
1136 [DllImport ("gdiplus.dll")]
1137 internal static extern Status GdipScaleMatrix (IntPtr matrix, float scaleX, float scaleY, MatrixOrder order);
1138 [DllImport ("gdiplus.dll")]
1139 internal static extern Status GdipRotateMatrix (IntPtr matrix, float angle, MatrixOrder order);
1141 [DllImport ("gdiplus.dll")]
1142 internal static extern Status GdipShearMatrix (IntPtr matrix, float shearX, float shearY, MatrixOrder order);
1144 [DllImport ("gdiplus.dll")]
1145 internal static extern Status GdipInvertMatrix (IntPtr matrix);
1146 [DllImport ("gdiplus.dll")]
1147 internal static extern Status GdipTransformMatrixPoints (IntPtr matrix, PointF [] pts, int count);
1148 [DllImport ("gdiplus.dll")]
1149 internal static extern Status GdipTransformMatrixPointsI (IntPtr matrix, Point [] pts, int count);
1150 [DllImport ("gdiplus.dll")]
1151 internal static extern Status GdipVectorTransformMatrixPoints (IntPtr matrix, PointF [] pts, int count);
1152 [DllImport ("gdiplus.dll")]
1153 internal static extern Status GdipVectorTransformMatrixPointsI (IntPtr matrix, Point [] pts, int count);
1154 [DllImport ("gdiplus.dll")]
1155 internal static extern Status GdipIsMatrixInvertible (IntPtr matrix, out bool result);
1157 [DllImport ("gdiplus.dll")]
1158 internal static extern Status GdipIsMatrixIdentity (IntPtr matrix, out bool result);
1159 [DllImport ("gdiplus.dll")]
1160 internal static extern Status GdipIsMatrixEqual (IntPtr matrix, IntPtr matrix2, out bool result);
1162 // GraphicsPath functions
1163 [DllImport ("gdiplus.dll")]
1164 internal static extern Status GdipCreatePath (FillMode brushMode, out IntPtr path);
1165 [DllImport ("gdiplus.dll")]
1166 internal static extern Status GdipCreatePath2 (PointF [] points, byte [] types, int count, FillMode brushMode, out IntPtr path);
1167 [DllImport ("gdiplus.dll")]
1168 internal static extern Status GdipCreatePath2I (Point [] points, byte [] types, int count, FillMode brushMode, out IntPtr path);
1169 [DllImport ("gdiplus.dll")]
1170 internal static extern Status GdipClonePath (IntPtr path, out IntPtr clonePath);
1171 [DllImport ("gdiplus.dll")]
1172 internal static extern Status GdipDeletePath (IntPtr path);
1173 [DllImport ("gdiplus.dll")]
1174 internal static extern Status GdipResetPath (IntPtr path);
1175 [DllImport ("gdiplus.dll")]
1176 internal static extern Status GdipGetPointCount (IntPtr path, out int count);
1177 [DllImport ("gdiplus.dll")]
1178 internal static extern Status GdipGetPathTypes (IntPtr path, [Out] byte [] types, int count);
1179 [DllImport ("gdiplus.dll")]
1180 internal static extern Status GdipGetPathPoints (IntPtr path, [Out] PointF [] points, int count);
1181 [DllImport ("gdiplus.dll")]
1182 internal static extern Status GdipGetPathPointsI (IntPtr path, [Out] Point [] points, int count);
1183 [DllImport ("gdiplus.dll")]
1184 internal static extern Status GdipGetPathFillMode (IntPtr path, out FillMode fillMode);
1185 [DllImport ("gdiplus.dll")]
1186 internal static extern Status GdipSetPathFillMode (IntPtr path, FillMode fillMode);
1187 [DllImport ("gdiplus.dll")]
1188 internal static extern Status GdipStartPathFigure (IntPtr path);
1189 [DllImport ("gdiplus.dll")]
1190 internal static extern Status GdipClosePathFigure (IntPtr path);
1191 [DllImport ("gdiplus.dll")]
1192 internal static extern Status GdipClosePathFigures (IntPtr path);
1193 [DllImport ("gdiplus.dll")]
1194 internal static extern Status GdipSetPathMarker (IntPtr path);
1195 [DllImport ("gdiplus.dll")]
1196 internal static extern Status GdipClearPathMarkers (IntPtr path);
1197 [DllImport ("gdiplus.dll")]
1198 internal static extern Status GdipReversePath (IntPtr path);
1199 [DllImport ("gdiplus.dll")]
1200 internal static extern Status GdipGetPathLastPoint (IntPtr path, out PointF lastPoint);
1201 [DllImport ("gdiplus.dll")]
1202 internal static extern Status GdipAddPathLine (IntPtr path, float x1, float y1, float x2, float y2);
1203 [DllImport ("gdiplus.dll")]
1204 internal static extern Status GdipAddPathArc (IntPtr path, float x, float y, float width, float height, float startAngle, float sweepAngle);
1205 [DllImport ("gdiplus.dll")]
1206 internal static extern Status GdipAddPathBezier (IntPtr path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
1207 [DllImport ("gdiplus.dll")]
1208 internal static extern Status GdipAddPathBeziers (IntPtr path, PointF [] points, int count);
1209 [DllImport ("gdiplus.dll")]
1210 internal static extern Status GdipAddPathCurve (IntPtr path, PointF [] points, int count);
1211 [DllImport ("gdiplus.dll")]
1212 internal static extern Status GdipAddPathCurveI (IntPtr path, Point [] points, int count);
1213 [DllImport ("gdiplus.dll")]
1214 internal static extern Status GdipAddPathCurve2 (IntPtr path, PointF [] points, int count, float tension);
1215 [DllImport ("gdiplus.dll")]
1216 internal static extern Status GdipAddPathCurve2I (IntPtr path, Point [] points, int count, float tension);
1217 [DllImport ("gdiplus.dll")]
1218 internal static extern Status GdipAddPathCurve3 (IntPtr path, PointF [] points, int count, int offset, int numberOfSegments, float tension);
1219 [DllImport ("gdiplus.dll")]
1220 internal static extern Status GdipAddPathCurve3I (IntPtr path, Point [] points, int count, int offset, int numberOfSegments, float tension);
1221 [DllImport ("gdiplus.dll")]
1222 internal static extern Status GdipAddPathClosedCurve (IntPtr path, PointF [] points, int count);
1223 [DllImport ("gdiplus.dll")]
1224 internal static extern Status GdipAddPathClosedCurveI (IntPtr path, Point [] points, int count);
1225 [DllImport ("gdiplus.dll")]
1226 internal static extern Status GdipAddPathClosedCurve2 (IntPtr path, PointF [] points, int count, float tension);
1227 [DllImport ("gdiplus.dll")]
1228 internal static extern Status GdipAddPathClosedCurve2I (IntPtr path, Point [] points, int count, float tension);
1229 [DllImport ("gdiplus.dll")]
1230 internal static extern Status GdipAddPathRectangle (IntPtr path, float x, float y, float width, float height);
1231 [DllImport ("gdiplus.dll")]
1232 internal static extern Status GdipAddPathRectangles (IntPtr path, RectangleF [] rects, int count);
1233 [DllImport ("gdiplus.dll")]
1234 internal static extern Status GdipAddPathEllipse (IntPtr path, float x, float y, float width, float height);
1235 [DllImport ("gdiplus.dll")]
1236 internal static extern Status GdipAddPathEllipseI (IntPtr path, int x, int y, int width, int height);
1237 [DllImport ("gdiplus.dll")]
1238 internal static extern Status GdipAddPathPie (IntPtr path, float x, float y, float width, float height, float startAngle, float sweepAngle);
1239 [DllImport ("gdiplus.dll")]
1240 internal static extern Status GdipAddPathPieI (IntPtr path, int x, int y, int width, int height, float startAngle, float sweepAngle);
1241 [DllImport ("gdiplus.dll")]
1242 internal static extern Status GdipAddPathPolygon (IntPtr path, PointF [] points, int count);
1243 [DllImport ("gdiplus.dll")]
1244 internal static extern Status GdipAddPathPath (IntPtr path, IntPtr addingPath, bool connect);
1245 [DllImport ("gdiplus.dll")]
1246 internal static extern Status GdipAddPathLineI (IntPtr path, int x1, int y1, int x2, int y2);
1247 [DllImport ("gdiplus.dll")]
1248 internal static extern Status GdipAddPathArcI (IntPtr path, int x, int y, int width, int height, float startAngle, float sweepAngle);
1250 [DllImport ("gdiplus.dll")]
1251 internal static extern Status GdipAddPathBezierI (IntPtr path, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
1252 [DllImport ("gdiplus.dll")]
1253 internal static extern Status GdipAddPathBeziersI (IntPtr path, Point [] points, int count);
1255 [DllImport ("gdiplus.dll")]
1256 internal static extern Status GdipAddPathPolygonI (IntPtr path, Point [] points, int count);
1257 [DllImport ("gdiplus.dll")]
1258 internal static extern Status GdipAddPathRectangleI (IntPtr path, int x, int y, int width, int height);
1259 [DllImport ("gdiplus.dll")]
1260 internal static extern Status GdipAddPathRectanglesI (IntPtr path, Rectangle [] rects, int count);
1261 [DllImport ("gdiplus.dll")]
1262 internal static extern Status GdipFlattenPath (IntPtr path, IntPtr matrix, float floatness);
1263 [DllImport ("gdiplus.dll")]
1264 internal static extern Status GdipTransformPath (IntPtr path, IntPtr matrix);
1265 [DllImport ("gdiplus.dll")]
1266 internal static extern Status GdipWarpPath (IntPtr path, IntPtr matrix,
1267 PointF [] points, int count,
1268 float srcx, float srcy, float srcwidth, float srcheight,
1269 WarpMode mode, float flatness);
1270 [DllImport ("gdiplus.dll")]
1271 internal static extern Status GdipWidenPath (IntPtr path, IntPtr pen, IntPtr matrix, float flatness);
1272 [DllImport ("gdiplus.dll")]
1273 internal static extern Status GdipGetPathWorldBounds (IntPtr path, out RectangleF bounds, IntPtr matrix, IntPtr pen);
1274 [DllImport ("gdiplus.dll")]
1275 internal static extern Status GdipGetPathWorldBoundsI (IntPtr path, out Rectangle bounds, IntPtr matrix, IntPtr pen);
1276 [DllImport ("gdiplus.dll")]
1277 internal static extern Status GdipIsVisiblePathPoint (IntPtr path, float x, float y, IntPtr graphics, out bool result);
1278 [DllImport ("gdiplus.dll")]
1279 internal static extern Status GdipIsVisiblePathPointI (IntPtr path, int x, int y, IntPtr graphics, out bool result);
1280 [DllImport ("gdiplus.dll")]
1281 internal static extern Status GdipIsOutlineVisiblePathPoint (IntPtr path, float x, float y, IntPtr graphics, out bool result);
1282 [DllImport ("gdiplus.dll")]
1283 internal static extern Status GdipIsOutlineVisiblePathPointI (IntPtr path, int x, int y, IntPtr graphics, out bool result);
1285 // GraphicsPathIterator
1286 [DllImport("gdiplus.dll")]
1287 internal static extern Status GdipCreatePathIter (out IntPtr iterator, IntPtr path);
1288 [DllImport("gdiplus.dll")]
1289 internal static extern Status GdipPathIterGetCount (IntPtr iterator, out int count);
1290 [DllImport("gdiplus.dll")]
1291 internal static extern Status GdipPathIterGetSubpathCount (IntPtr iterator, out int count);
1292 [DllImport("gdiplus.dll")]
1293 internal static extern Status GdipDeletePathIter (IntPtr iterator);
1294 [DllImport("gdiplus.dll")]
1295 internal static extern Status GdipPathIterCopyData (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int startIndex, int endIndex);
1296 [DllImport("gdiplus.dll")]
1297 internal static extern Status GdipPathIterEnumerate (IntPtr iterator, out int resultCount, PointF [] points, byte [] types, int count);
1298 [DllImport("gdiplus.dll")]
1299 internal static extern Status GdipPathIterHasCurve (IntPtr iterator, out bool curve);
1300 [DllImport("gdiplus.dll")]
1301 internal static extern Status GdipPathIterNextMarkerPath (IntPtr iterator, out int resultCount, IntPtr path);
1302 [DllImport("gdiplus.dll")]
1303 internal static extern Status GdipPathIterNextMarker (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex);
1304 [DllImport("gdiplus.dll")]
1305 internal static extern Status GdipPathIterNextPathType (IntPtr iterator, out int resultCount, out byte pathType, out int startIndex, out int endIndex);
1306 [DllImport("gdiplus.dll")]
1307 internal static extern Status GdipPathIterNextSubpathPath (IntPtr iterator, out int resultCount, IntPtr path, out bool isClosed);
1308 [DllImport("gdiplus.dll")]
1309 internal static extern Status GdipPathIterNextSubpath (IntPtr iterator, out int resultCount, out int startIndex, out int endIndex, out bool isClosed);
1310 [DllImport("gdiplus.dll")]
1311 internal static extern Status GdipPathIterRewind (IntPtr iterator);
1314 [DllImport ("gdiplus.dll")]
1315 internal static extern Status GdipCreateImageAttributes (out IntPtr imageattr);
1317 [DllImport ("gdiplus.dll")]
1318 internal static extern Status GdipSetImageAttributesColorKeys (IntPtr imageattr,
1319 ColorAdjustType type, bool enableFlag, int colorLow, int colorHigh);
1321 [DllImport ("gdiplus.dll")]
1322 internal static extern Status GdipDisposeImageAttributes (IntPtr imageattr);
1324 [DllImport ("gdiplus.dll")]
1325 internal static extern Status GdipSetImageAttributesColorMatrix (IntPtr imageattr,
1326 ColorAdjustType type, bool enableFlag, ColorMatrix colorMatrix,
1327 ColorMatrix grayMatrix, ColorMatrixFlag flags);
1329 [DllImport ("gdiplus.dll")]
1330 internal static extern Status GdipSetImageAttributesGamma (IntPtr imageattr,
1331 ColorAdjustType type, bool enableFlag,
1334 [DllImport ("gdiplus.dll")]
1335 internal static extern Status GdipSetImageAttributesNoOp (IntPtr imageattr,
1336 ColorAdjustType type, bool enableFlag);
1338 [DllImport ("gdiplus.dll")]
1339 internal static extern Status GdipSetImageAttributesOutputChannel (IntPtr imageattr,
1340 ColorAdjustType type, bool enableFlag, ColorChannelFlag channelFlags);
1342 [DllImport ("gdiplus.dll", CharSet=CharSet.Auto)]
1343 internal static extern Status GdipSetImageAttributesOutputChannelColorProfile (IntPtr imageattr,
1344 ColorAdjustType type, bool enableFlag, [MarshalAs (UnmanagedType.LPWStr)] string profileName);
1346 [DllImport ("gdiplus.dll")]
1347 internal static extern Status GdipSetImageAttributesRemapTable (IntPtr imageattr,
1348 ColorAdjustType type, bool enableFlag, uint mapSize, IntPtr colorMap);
1350 [DllImport ("gdiplus.dll")]
1351 internal static extern Status GdipSetImageAttributesThreshold (IntPtr imageattr,
1352 ColorAdjustType type, bool enableFlag, float thresHold);
1354 [DllImport ("gdiplus.dll")]
1355 internal static extern Status GdipCloneImageAttributes(IntPtr imageattr, out IntPtr cloneImageattr);
1357 [DllImport ("gdiplus.dll")]
1358 internal static extern Status GdipGetImageAttributesAdjustedPalette(IntPtr imageattr,
1359 out IntPtr colorPalette, ColorAdjustType colorAdjustType);
1361 [DllImport ("gdiplus.dll")]
1362 internal static extern Status GdipSetImageAttributesWrapMode(IntPtr imageattr, WrapMode wrap,
1363 int argb, bool clamp);
1367 [DllImport("gdiplus.dll")]
1368 internal static extern Status GdipCreateFont (IntPtr fontFamily, float emSize, FontStyle style, GraphicsUnit unit, out IntPtr font);
1369 [DllImport("gdiplus.dll")]
1370 internal static extern Status GdipDeleteFont (IntPtr font);
1371 [DllImport("gdiplus.dll", CharSet=CharSet.Ansi)]
1372 internal static extern Status GdipGetLogFontA(IntPtr font, IntPtr graphics, IntPtr logfontA);
1373 [DllImport("gdiplus.dll", CharSet=CharSet.Unicode)]
1374 internal static extern Status GdipGetLogFontW(IntPtr font, IntPtr graphics, IntPtr logfontW);
1376 [DllImport("gdiplus.dll")]
1377 internal static extern Status GdipCreateFontFromDC(IntPtr hdc, out IntPtr font);
1378 [DllImport("gdiplus.dll", SetLastError=true)]
1379 internal static extern Status GdipCreateFontFromLogfontA(IntPtr hdc, ref LOGFONTA lf, out IntPtr ptr);
1381 // These are our private functions, they exists in our own libgdiplus library, this way we
1382 // avoid relying on wine in System.Drawing
1383 [DllImport("gdiplus.dll")]
1384 internal static extern Status GdipGetHfont (IntPtr font, out IntPtr Hfont);
1385 [DllImport("gdiplus.dll")]
1386 internal static extern Status GdipCreateFontFromHfont(IntPtr hdc, out IntPtr font, ref LOGFONTA lf);
1388 // This is win32/gdi, not gdiplus, but it's easier to keep in here, also see above comment
1389 [DllImport("gdi32.dll", EntryPoint="CreateFontIndirectA", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1390 internal static extern IntPtr CreateFontIndirectA (ref LOGFONTA logfontA);
1391 [DllImport("user32.dll", EntryPoint="GetDC", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1392 internal static extern IntPtr GetDC(IntPtr hwnd);
1393 [DllImport("user32.dll", EntryPoint="ReleaseDC", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1394 internal static extern int ReleaseDC(IntPtr hdc);
1395 [DllImport("gdi32.dll", EntryPoint="SelectObject", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
1396 internal static extern IntPtr SelectObject(IntPtr hdc, IntPtr obj);
1397 [DllImport("user32.dll", SetLastError=true)]
1398 internal static extern bool GetIconInfo (IntPtr hIcon, out IconInfo iconinfo);
1400 [DllImport("user32.dll")]
1401 internal static extern IntPtr GetDesktopWindow ();
1403 [DllImport("gdi32.dll", SetLastError=true)]
1404 public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest,
1405 int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
1408 // Some special X11 stuff
1409 [DllImport("libX11", EntryPoint="XOpenDisplay")]
1410 internal extern static IntPtr XOpenDisplay(IntPtr display);
1412 [DllImport("libX11", EntryPoint="XCloseDisplay")]
1413 internal extern static int XCloseDisplay(IntPtr display);
1415 [DllImport ("libX11", EntryPoint="XRootWindow")]
1416 internal extern static IntPtr XRootWindow(IntPtr display, int screen);
1418 [DllImport ("libX11", EntryPoint="XDefaultDepth")]
1419 internal extern static uint XDefaultDepth(IntPtr display, int screen);
1421 [DllImport ("libX11", EntryPoint="XGetImage")]
1422 internal extern static IntPtr XGetImage(IntPtr display, IntPtr drawable, int src_x, int src_y, int width, int height, int pane, int format);
1424 [DllImport ("libX11", EntryPoint="XGetPixel")]
1425 internal extern static int XGetPixel(IntPtr image, int x, int y);
1427 [DllImport ("libX11", EntryPoint="XDestroyImage")]
1428 internal extern static int XDestroyImage(IntPtr image);
1430 [DllImport ("libX11", EntryPoint="XDefaultVisual")]
1431 internal extern static IntPtr XDefaultVisual(IntPtr display, int screen);
1433 [DllImport ("libX11", EntryPoint="XGetVisualInfo")]
1434 internal extern static IntPtr XGetVisualInfo (IntPtr display, int vinfo_mask, ref XVisualInfo vinfo_template, ref int nitems);
1436 [DllImport ("libX11", EntryPoint="XVisualIDFromVisual")]
1437 internal extern static int XVisualIDFromVisual(IntPtr visual);
1441 [DllImport ("gdiplus.dll")]
1442 internal static extern Status GdipGetFontCollectionFamilyCount (IntPtr collection, out int found);
1444 [DllImport ("gdiplus.dll")]
1445 internal static extern Status GdipGetFontCollectionFamilyList (IntPtr collection, int getCount, IntPtr dest, out int retCount);
1446 //internal static extern Status GdipGetFontCollectionFamilyList( IntPtr collection, int getCount, [Out] FontFamily [] familyList, out int retCount );
1448 [DllImport ("gdiplus.dll")]
1449 internal static extern Status GdipNewInstalledFontCollection (out IntPtr collection);
1451 [DllImport ("gdiplus.dll")]
1452 internal static extern Status GdipNewPrivateFontCollection (out IntPtr collection);
1454 [DllImport ("gdiplus.dll")]
1455 internal static extern Status GdipDeletePrivateFontCollection (IntPtr collection);
1457 [DllImport ("gdiplus.dll", CharSet=CharSet.Auto)]
1458 internal static extern Status GdipPrivateAddFontFile (IntPtr collection,
1459 [MarshalAs (UnmanagedType.LPWStr)] string fileName );
1461 [DllImport ("gdiplus.dll")]
1462 internal static extern Status GdipPrivateAddMemoryFont (IntPtr collection, IntPtr mem, int length);
1465 [DllImport ("gdiplus.dll", CharSet=CharSet.Auto)]
1466 internal static extern Status GdipCreateFontFamilyFromName (
1467 [MarshalAs(UnmanagedType.LPWStr)] string fName, IntPtr collection, out IntPtr fontFamily);
1469 [DllImport ("gdiplus.dll")]
1470 internal static extern Status GdipGetFamilyName(IntPtr family, IntPtr fName, int language);
1472 [DllImport ("gdiplus.dll")]
1473 internal static extern Status GdipGetGenericFontFamilySansSerif (out IntPtr fontFamily);
1475 [DllImport ("gdiplus.dll")]
1476 internal static extern Status GdipGetGenericFontFamilySerif (out IntPtr fontFamily);
1478 [DllImport ("gdiplus.dll")]
1479 internal static extern Status GdipGetGenericFontFamilyMonospace (out IntPtr fontFamily);
1481 [DllImport ("gdiplus.dll")]
1482 internal static extern Status GdipGetCellAscent (IntPtr fontFamily, int style, out short ascent);
1484 [DllImport ("gdiplus.dll")]
1485 internal static extern Status GdipGetCellDescent (IntPtr fontFamily, int style, out short descent);
1487 [DllImport ("gdiplus.dll")]
1488 internal static extern Status GdipGetLineSpacing (IntPtr fontFamily, int style, out short spacing);
1490 [DllImport ("gdiplus.dll")]
1491 internal static extern Status GdipGetEmHeight (IntPtr fontFamily, int style, out short emHeight);
1493 [DllImport ("gdiplus.dll")]
1494 internal static extern Status GdipIsStyleAvailable (IntPtr fontFamily, int style, out bool styleAvailable);
1496 [DllImport ("gdiplus.dll")]
1497 internal static extern Status GdipDeleteFontFamily (IntPtr fontFamily);
1500 [DllImport ("gdiplus.dll")]
1501 internal static extern Status GdipCreateStringFormat(int formatAttributes, int language, out IntPtr format);
1502 [DllImport ("gdiplus.dll")]
1503 internal static extern Status GdipStringFormatGetGenericDefault(out IntPtr format);
1504 [DllImport ("gdiplus.dll")]
1505 internal static extern Status GdipStringFormatGetGenericTypographic(out IntPtr format);
1506 [DllImport ("gdiplus.dll")]
1507 internal static extern Status GdipDeleteStringFormat(IntPtr format);
1508 [DllImport ("gdiplus.dll")]
1509 internal static extern Status GdipCloneStringFormat(IntPtr srcformat, out IntPtr format);
1510 [DllImport ("gdiplus.dll")]
1511 internal static extern Status GdipSetStringFormatFlags(IntPtr format, StringFormatFlags flags);
1512 [DllImport ("gdiplus.dll")]
1513 internal static extern Status GdipGetStringFormatFlags(IntPtr format, out StringFormatFlags flags);
1514 [DllImport ("gdiplus.dll")]
1515 internal static extern Status GdipSetStringFormatAlign(IntPtr format, StringAlignment align);
1516 [DllImport ("gdiplus.dll")]
1517 internal static extern Status GdipGetStringFormatAlign(IntPtr format, out StringAlignment align);
1518 [DllImport ("gdiplus.dll")]
1519 internal static extern Status GdipSetStringFormatLineAlign(IntPtr format, StringAlignment align);
1520 [DllImport ("gdiplus.dll")]
1521 internal static extern Status GdipGetStringFormatLineAlign(IntPtr format, out StringAlignment align);
1522 [DllImport ("gdiplus.dll")]
1523 internal static extern Status GdipSetStringFormatTrimming(IntPtr format, StringTrimming trimming);
1524 [DllImport ("gdiplus.dll")]
1525 internal static extern Status GdipGetStringFormatTrimming(IntPtr format, out StringTrimming trimming);
1526 [DllImport ("gdiplus.dll")]
1527 internal static extern Status GdipSetStringFormatHotkeyPrefix(IntPtr format, HotkeyPrefix hotkeyPrefix);
1528 [DllImport ("gdiplus.dll")]
1529 internal static extern Status GdipGetStringFormatHotkeyPrefix(IntPtr format, out HotkeyPrefix hotkeyPrefix);
1530 [DllImport ("gdiplus.dll")]
1531 internal static extern Status GdipSetStringFormatTabStops(IntPtr format, float firstTabOffset, int count, float [] tabStops);
1532 [DllImport ("gdiplus.dll")]
1533 internal static extern Status GdipGetStringFormatDigitSubstitution(IntPtr format, int language, out StringDigitSubstitute substitute);
1534 [DllImport ("gdiplus.dll")]
1535 internal static extern Status GdipSetStringFormatDigitSubstitution(IntPtr format, int language, StringDigitSubstitute substitute);
1536 [DllImport ("gdiplus.dll")]
1537 internal static extern Status GdipGetStringFormatTabStopCount(IntPtr format, out int count);
1538 [DllImport ("gdiplus.dll")]
1539 internal static extern Status GdipGetStringFormatTabStops(IntPtr format, int count, out float firstTabOffset, [In, Out] float [] tabStops);
1541 //ImageCodecInfo functions
1542 [DllImport("gdiplus.dll")]
1543 static internal extern Status GdipGetImageDecodersSize (out int decoderNums, out int arraySize);
1544 [DllImport("gdiplus.dll")]
1545 static internal extern Status GdipGetImageDecoders (int decoderNums, int arraySize, IntPtr decoders);
1546 [DllImport("gdiplus.dll")]
1547 static internal extern Status GdipGetImageEncodersSize (out int encoderNums, out int arraySize);
1548 [DllImport("gdiplus.dll")]
1549 static internal extern Status GdipGetImageEncoders (int encoderNums, int arraySize, IntPtr encoders);
1552 // These are stuff that is unix-only
1554 public delegate int StreamGetHeaderDelegate(IntPtr buf, int bufsz);
1555 public delegate int StreamGetBytesDelegate (IntPtr buf, int bufsz, bool peek);
1556 public delegate long StreamSeekDelegate (int offset, int whence);
1557 public delegate int StreamPutBytesDelegate (IntPtr buf, int bufsz);
1558 public delegate void StreamCloseDelegate ();
1559 public delegate long StreamSizeDelegate ();
1561 internal class GdiPlusStreamHelper
1563 public Stream stream;
1565 private StreamGetHeaderDelegate sghd = null;
1566 private StreamGetBytesDelegate sgbd = null;
1567 private StreamSeekDelegate skd = null;
1568 private StreamPutBytesDelegate spbd = null;
1569 private StreamCloseDelegate scd = null;
1570 private StreamSizeDelegate ssd = null;
1571 private byte[] start_buf;
1572 private int start_buf_pos;
1573 private int start_buf_len;
1575 public GdiPlusStreamHelper (Stream s)
1578 if (stream != null && stream.CanSeek) {
1579 stream.Seek (0, SeekOrigin.Begin);
1583 public int StreamGetHeaderImpl (IntPtr buf, int bufsz) {
1586 start_buf = new byte[bufsz];
1589 bytesRead = stream.Read (start_buf, 0, bufsz);
1590 } catch (IOException) {
1594 if (bytesRead > 0 && buf != IntPtr.Zero) {
1595 Marshal.Copy (start_buf, 0, (IntPtr) (buf.ToInt64()), bytesRead);
1599 start_buf_len = bytesRead;
1604 public StreamGetHeaderDelegate GetHeaderDelegate {
1606 if (stream != null && stream.CanRead) {
1608 sghd = new StreamGetHeaderDelegate (StreamGetHeaderImpl);
1616 public int StreamGetBytesImpl (IntPtr buf, int bufsz, bool peek)
1618 if (buf == IntPtr.Zero && peek) {
1622 byte[] managedBuf = new byte[bufsz];
1624 long streamPosition = 0;
1627 if (stream.CanSeek) {
1628 streamPosition = stream.Position;
1630 if (start_buf_len > 0) {
1631 if (start_buf_len > bufsz) {
1632 Array.Copy(start_buf, start_buf_pos, managedBuf, 0, bufsz);
1633 start_buf_pos += bufsz;
1634 start_buf_len -= bufsz;
1639 Array.Copy(start_buf, start_buf_pos, managedBuf, 0, start_buf_len);
1640 bufsz -= start_buf_len;
1641 bytesRead = start_buf_len;
1648 bytesRead += stream.Read (managedBuf, bytesRead, bufsz);
1649 } catch (IOException) {
1654 if (bytesRead > 0 && buf != IntPtr.Zero) {
1655 Marshal.Copy (managedBuf, 0, (IntPtr) (buf.ToInt64()), bytesRead);
1658 if (!stream.CanSeek && (bufsz == 10) && peek) {
1659 // Special 'hack' to support peeking of the type for gdi+ on non-seekable streams
1663 if (stream.CanSeek) {
1664 // If we are peeking bytes, then go back to original position before peeking
1665 stream.Seek (streamPosition, SeekOrigin.Begin);
1667 throw new NotSupportedException();
1675 public StreamGetBytesDelegate GetBytesDelegate {
1677 if (stream != null && stream.CanRead) {
1679 sgbd = new StreamGetBytesDelegate (StreamGetBytesImpl);
1687 public long StreamSeekImpl (int offset, int whence)
1691 retOffset = stream.Seek ((long) offset, SeekOrigin.Begin);
1692 } else if (whence == 1) {
1693 retOffset = stream.Seek ((long) offset, SeekOrigin.Current);
1694 } else if (whence == 2) {
1695 retOffset = stream.Seek ((long) offset, SeekOrigin.End);
1703 public StreamSeekDelegate SeekDelegate {
1705 if (stream != null && stream.CanSeek) {
1707 skd = new StreamSeekDelegate (StreamSeekImpl);
1715 public int StreamPutBytesImpl (IntPtr buf, int bufsz)
1717 byte[] managedBuf = new byte[bufsz];
1718 Marshal.Copy (buf, managedBuf, 0, bufsz);
1719 stream.Write (managedBuf, 0, bufsz);
1723 public StreamPutBytesDelegate PutBytesDelegate {
1725 if (stream != null && stream.CanWrite) {
1727 spbd = new StreamPutBytesDelegate (StreamPutBytesImpl);
1735 public void StreamCloseImpl ()
1740 public StreamCloseDelegate CloseDelegate {
1742 if (stream != null) {
1744 scd = new StreamCloseDelegate (StreamCloseImpl);
1752 public long StreamSizeImpl ()
1754 return stream.Length;
1757 public StreamSizeDelegate SizeDelegate {
1759 if (stream != null) {
1761 ssd = new StreamSizeDelegate (StreamSizeImpl);
1771 /* Mac only function calls */
1772 [DllImport("gdiplus.dll")]
1773 internal static extern Status GdipCreateFromQuartz_macosx (IntPtr cgref, int width, int height, out IntPtr graphics);
1775 /* Linux only function calls*/
1776 [DllImport("gdiplus.dll")]
1777 internal static extern Status GdipSetVisibleClip_linux (IntPtr graphics, ref Rectangle rect);
1779 [DllImport("gdiplus.dll")]
1780 internal static extern Status GdipCreateFromXDrawable_linux (IntPtr drawable, IntPtr display, out IntPtr graphics);
1782 // Stream functions for non-Win32 (libgdiplus specific(
1783 [DllImport("gdiplus.dll")]
1784 static internal extern Status GdipLoadImageFromDelegate_linux ( StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes,
1785 StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, out IntPtr image);
1786 [DllImport("gdiplus.dll")]
1787 static internal extern Status GdipSaveImageToDelegate_linux ( IntPtr image, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes,
1788 StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, ref Guid encoderClsID, IntPtr encoderParameters );