Point Casting
Point
and PointF
classes were originally created in IronSoftware.Drawing
to match the functionalities available in other drawing libraries, such as System.Drawing
, SixLabors.ImageSharp
, Maui.Graphics
, and SkiaSharp
. As a result, IronSoftware.Drawing
enables implicit casting for Point
and PointF
objects, allowing them to be used across libraries and manipulated by users in the program.
The code snippet below demonstrates how implicit casting is achieved. In the first snippet, an IronSoftware.Drawing.Point
object is cast to a Point
object from another library, while the second snippet shows the opposite conversion. To perform implicit casting, simply assign the IronSoftware.Drawing.Point
object to the variable of the desired library.
// Demonstrating implicit casting with IronSoftware.Drawing
// Snippet 1: From IronSoftware.Drawing.Point to System.Drawing.Point
IronSoftware.Drawing.Point ironPoint = new IronSoftware.Drawing.Point(10.5, 20.5);
System.Drawing.Point systemPoint = ironPoint;
// After casting, the systemPoint coordinates are converted to integers
// Snippet 2: From System.Drawing.Point back to IronSoftware.Drawing.Point
System.Drawing.Point anotherSystemPoint = new System.Drawing.Point(15, 25);
IronSoftware.Drawing.Point anotherIronPoint = anotherSystemPoint;
// anotherIronPoint coordinates are converted back to double
// Demonstrating implicit casting with IronSoftware.Drawing
// Snippet 1: From IronSoftware.Drawing.Point to System.Drawing.Point
IronSoftware.Drawing.Point ironPoint = new IronSoftware.Drawing.Point(10.5, 20.5);
System.Drawing.Point systemPoint = ironPoint;
// After casting, the systemPoint coordinates are converted to integers
// Snippet 2: From System.Drawing.Point back to IronSoftware.Drawing.Point
System.Drawing.Point anotherSystemPoint = new System.Drawing.Point(15, 25);
IronSoftware.Drawing.Point anotherIronPoint = anotherSystemPoint;
// anotherIronPoint coordinates are converted back to double
' Demonstrating implicit casting with IronSoftware.Drawing
' Snippet 1: From IronSoftware.Drawing.Point to System.Drawing.Point
Dim ironPoint As New IronSoftware.Drawing.Point(10.5, 20.5)
Dim systemPoint As System.Drawing.Point = ironPoint
' After casting, the systemPoint coordinates are converted to integers
' Snippet 2: From System.Drawing.Point back to IronSoftware.Drawing.Point
Dim anotherSystemPoint As New System.Drawing.Point(15, 25)
Dim anotherIronPoint As IronSoftware.Drawing.Point = anotherSystemPoint
' anotherIronPoint coordinates are converted back to double
It's important to note that implicit casting does not apply to all libraries. For instance, casting System.Drawing.PointF
to IronSoftware.Drawing.PointF
is not possible, as it is not supported by System.Drawing
. However, casting IronSoftware.Drawing.Point
and PointF
to other libraries is possible. When casting from an IronSoftware.Drawing.Point
object, the value type of the coordinates changes from System.Double
to System.Int32
, whereas for PointF
, the System.Single
value is maintained after casting.
Examples of other libraries available for casting include Microsoft.Maui.Graphics.Point
and SkiaSharp.SKPointI
.
// Example with other libraries
// From IronSoftware.Drawing.Point to Microsoft.Maui.Graphics.Point
IronSoftware.Drawing.Point ironPointExample = new IronSoftware.Drawing.Point(12.7, 17.8);
Microsoft.Maui.Graphics.Point mauiPoint = ironPointExample;
// mauiPoint maintains its coordinates as System.Int32 after implicit casting
// From IronSoftware.Drawing.PointF to SkiaSharp.SKPoint
IronSoftware.Drawing.PointF ironPointF = new IronSoftware.Drawing.PointF(5.5f, 9.3f);
SkiaSharp.SKPoint skiaPoint = ironPointF;
// skiaPoint maintains its coordinates as System.Single after implicit casting
// Example with other libraries
// From IronSoftware.Drawing.Point to Microsoft.Maui.Graphics.Point
IronSoftware.Drawing.Point ironPointExample = new IronSoftware.Drawing.Point(12.7, 17.8);
Microsoft.Maui.Graphics.Point mauiPoint = ironPointExample;
// mauiPoint maintains its coordinates as System.Int32 after implicit casting
// From IronSoftware.Drawing.PointF to SkiaSharp.SKPoint
IronSoftware.Drawing.PointF ironPointF = new IronSoftware.Drawing.PointF(5.5f, 9.3f);
SkiaSharp.SKPoint skiaPoint = ironPointF;
// skiaPoint maintains its coordinates as System.Single after implicit casting
' Example with other libraries
' From IronSoftware.Drawing.Point to Microsoft.Maui.Graphics.Point
Dim ironPointExample As New IronSoftware.Drawing.Point(12.7, 17.8)
Dim mauiPoint As Microsoft.Maui.Graphics.Point = ironPointExample
' mauiPoint maintains its coordinates as System.Int32 after implicit casting
' From IronSoftware.Drawing.PointF to SkiaSharp.SKPoint
Dim ironPointF As New IronSoftware.Drawing.PointF(5.5F, 9.3F)
Dim skiaPoint As SkiaSharp.SKPoint = ironPointF
' skiaPoint maintains its coordinates as System.Single after implicit casting