I’m trying to paint a bezier curve in a sample Winforms application.
I’m calculating the bezier points, and then painting using DrawImage to draw a custom image brush on each point.
However I’m not exactly getting the result I was hoping for – the resulting curve is not smooth at the points that it bends (note the Y coordinates are increased / decreased with 1px):

Here is an example of a “nice” curve quickly painted in “photoshop” with the brush tool:

Does anyone know how to achieve this kind of “antialiasing”?
I’m basically doing this:
using(var g = Graphics.FromImage(bitmap))
{
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//points - an array with calculated beziere curve points
//image - the "image brush" that is painted at each curve point
foreach (var p in points)
{
g.DrawImage(image, p);
g.Flush();
}
}
Thank you!
You’re probably getting this because your
pointscollection contains structs of typePoint, which usesInt32– as a result, you’re quantizing your points yourself.Try using
PointFinstead – this allows you to draw images at any arbitrary location, instead of being quantized around integer locations.