WriteableBitmapEx.DrawRectangle Thickness?
How do you change the thickness / weight for the outline of a rectangle drawn with the WriteableBitmapEx.DrawRectangle extension method? The code I'm using to draw the rectangle:
WriteableBitmap wbmp = new WriteableBitmap(bmp);
wbmp.DrawRectangle(0, 0, 480, 360, Colors.DarkGray);
Using this code, the width of the rectangle drawn is 1px.
+3
source to share
3 answers
Workaround from WritableBitmapEx.Add Thickness parameter for shapes
//Original points for line
int x1 = (int)pts[0].X;
int y1 = (int)pts[0].Y;
int x2 = (int)pts[1].X;
int y2 = (int)pts[1].Y;
//Parallel line code from http://stackoverflow.com/questions/2825412/draw-a-parallel-line var L = Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
var offsetPixels = 4;//Line "thickness"
// This is the second line will be parallel to the first
int x1p = (int)(x1 + offsetPixels * (y2 - y1) / L);
int x2p = (int)(x2 + offsetPixels * (y2 - y1) / L);
int y1p = (int)(y1 + offsetPixels * (x1 - x2) / L);
int y2p = (int)(y2 + offsetPixels * (x1 - x2) / L);
//writeableBmp.DrawLine(x1, y1, x2, y2, Colors.Red);
//writeableBmp.DrawLine(x1p, y1p, x2p, y2p, Colors.Blue);
//Create closed filled polygon for "thick line"
writeableBmp.FillPolygon(new int[] { x1, y1, x2, y2, x2p, y2p, x1p, y1p, x1, y1 }, Colors.Red);
+2
source to share
Here's a nice workaround using the lesser-known "inflate" method that already comes from "Rectangle":
int pen_thickness = 5;
Rectangle original_rect = new Rect(0, 0, 480, 360); // using the poster original values
for(int i = 0; i < pen_thickness; i++)
{
Rectangle bigger_rect = Rectangle.Inflate(original_rect, i, i);
wbmp.DrawRectangle(Pens.DarkGray, bigger_rect);
}
This will create a rectangle that will expand from the desired rectangle. Fast fashion can also be performed so that the thickness expands half inward (negative values for inflation) and half outward (positive values for inflation).
0
source to share
Created the following ... great for WriteableBitmapEx
private static void DrawRectangle(WriteableBitmap bitmap,
int left, int top, int width, int height, Color color, int thinkness)
{
var x1 = left;
var y1 = top;
var x2 = left + width;
var y2 = top + height;
bitmap.DrawRectangle(x1, y1, x2, y2, color);
for (var i = 0; i < thinkness; i++)
{
bitmap.DrawRectangle(x1--, y1--, x2++, y2++, color);
}
}
0
source to share