|
@@ -11,64 +11,63 @@ using Emgu.CV.Structure;
|
|
|
|
|
|
namespace bbiwarg.Output
|
|
|
{
|
|
|
- class OutputImage : IDisposable
|
|
|
+ class OutputImage : Image<Rgb,byte>
|
|
|
{
|
|
|
- public Image<Rgb, byte> Image { get; private set; }
|
|
|
-
|
|
|
public OutputImage(int width, int height)
|
|
|
+ :base(width,height)
|
|
|
{
|
|
|
- Image = new Image<Rgb, byte>(width, height);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
public Color getColotAt(int x, int y)
|
|
|
{
|
|
|
|
|
|
- byte red = Image.Data[y, x, 0];
|
|
|
- byte green = Image.Data[y, x, 1];
|
|
|
- byte blue = Image.Data[y, x, 2];
|
|
|
+ byte red = Data[y, x, 0];
|
|
|
+ byte green = Data[y, x, 1];
|
|
|
+ byte blue = Data[y, x, 2];
|
|
|
return Color.FromArgb(red, green, blue);
|
|
|
}
|
|
|
|
|
|
public void drawLineSegment(bbiwarg.Utility.LineSegment2D lineSegment, Color color, int thickness = 1)
|
|
|
{
|
|
|
- Image.Draw(new Emgu.CV.Structure.LineSegment2D(lineSegment.P1, lineSegment.P2), new Rgb(color), thickness);
|
|
|
+ Draw(new Emgu.CV.Structure.LineSegment2D(lineSegment.P1, lineSegment.P2), new Rgb(color), thickness);
|
|
|
}
|
|
|
|
|
|
public void drawContour(Contour<Point> contour, Color color, int thickness = 1)
|
|
|
{
|
|
|
- Image.Draw(contour, new Rgb(color), thickness);
|
|
|
+ Draw(contour, new Rgb(color), thickness);
|
|
|
}
|
|
|
|
|
|
public void drawPoints(Seq<Point> points, Color color, int thickness = 1)
|
|
|
{
|
|
|
- Image.Draw(points, new Rgb(color), thickness);
|
|
|
+ Draw(points, new Rgb(color), thickness);
|
|
|
}
|
|
|
|
|
|
public void drawPixel(int x, int y, Color color)
|
|
|
{
|
|
|
- Image.Data[y, x, 0] = color.R;
|
|
|
- Image.Data[y, x, 1] = color.G;
|
|
|
- Image.Data[y, x, 2] = color.B;
|
|
|
+ Data[y, x, 0] = color.R;
|
|
|
+ Data[y, x, 1] = color.G;
|
|
|
+ Data[y, x, 2] = color.B;
|
|
|
}
|
|
|
|
|
|
public void fillCircle(int x, int y, float radius, Color color)
|
|
|
{
|
|
|
- Image.Draw(new CircleF(new PointF(x, y), radius), new Rgb(color), 0);
|
|
|
+ Draw(new CircleF(new PointF(x, y), radius), new Rgb(color), 0);
|
|
|
}
|
|
|
|
|
|
public void fillRectangle(int x, int y, int width, int height, Color color) {
|
|
|
- Image.Draw(new Rectangle(x, y, width, height), new Rgb(color),-1);
|
|
|
+ Draw(new Rectangle(x, y, width, height), new Rgb(color),-1);
|
|
|
}
|
|
|
|
|
|
public void drawRectangle(int x, int y, int width, int height, Color color, int thichness = 0)
|
|
|
{
|
|
|
- Image.Draw(new Rectangle(x, y, width, height), new Rgb(color), thichness);
|
|
|
+ Draw(new Rectangle(x, y, width, height), new Rgb(color), thichness);
|
|
|
}
|
|
|
|
|
|
public void drawText(int x, int y, String text, Color color)
|
|
|
{
|
|
|
MCvFont font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_PLAIN, 1, 1);
|
|
|
- Image.Draw(text, ref font, new Point(x, y), new Rgb(color));
|
|
|
+ Draw(text, ref font, new Point(x, y), new Rgb(color));
|
|
|
}
|
|
|
|
|
|
public void drawDefect(ConvexityDefect defect, Color pointColor, Color lineColor)
|
|
@@ -82,31 +81,6 @@ namespace bbiwarg.Output
|
|
|
|
|
|
}
|
|
|
|
|
|
- public void drawImage(Image<Gray, byte> image, Color color)
|
|
|
- {
|
|
|
- if (color.R != 0)
|
|
|
- {
|
|
|
- if (color.R != byte.MaxValue)
|
|
|
- Image[0] = Image[0].Or(image.Mul((float)color.R / byte.MaxValue));
|
|
|
- else
|
|
|
- Image[0] = Image[0].Or(image);
|
|
|
- }
|
|
|
- if (color.G != 0)
|
|
|
- {
|
|
|
- if (color.G != byte.MaxValue)
|
|
|
- Image[1] = Image[1].Or(image.Mul((float)color.G / byte.MaxValue));
|
|
|
- else
|
|
|
- Image[1] = Image[1].Or(image);
|
|
|
- }
|
|
|
- if (color.B != 0)
|
|
|
- {
|
|
|
- if (color.B != byte.MaxValue)
|
|
|
- Image[2] = Image[2].Or(image.Mul((float)color.B / byte.MaxValue));
|
|
|
- else
|
|
|
- Image[2] = Image[2].Or(image);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public void drawQuadrangleGrid(Quadrangle quad, Color borderColor, Color gridColor, int numRows, int numCols)
|
|
|
{
|
|
|
|
|
@@ -137,7 +111,7 @@ namespace bbiwarg.Output
|
|
|
}
|
|
|
|
|
|
public void drawBorder(Color color) {
|
|
|
- drawRectangle(0, 0, Image.Width-1, Image.Height-1, color);
|
|
|
+ drawRectangle(0, 0, Width-1, Height-1, color);
|
|
|
}
|
|
|
|
|
|
public void drawTouchGesture(List<Vector2D> positions, float opacity=1)
|
|
@@ -156,9 +130,29 @@ namespace bbiwarg.Output
|
|
|
fillCircle(lastPos.IntX, lastPos.IntY, 3, pointColorFaded);
|
|
|
}
|
|
|
|
|
|
- public void Dispose()
|
|
|
+ public void drawImage(Image<Gray, byte> image, Color color)
|
|
|
{
|
|
|
- Image.Dispose();
|
|
|
+ if (color.R != 0)
|
|
|
+ {
|
|
|
+ if (color.R != byte.MaxValue)
|
|
|
+ this[0] = this[0].Or(image.Mul((float)color.R / byte.MaxValue));
|
|
|
+ else
|
|
|
+ this[0] = this[0].Or(image);
|
|
|
+ }
|
|
|
+ if (color.G != 0)
|
|
|
+ {
|
|
|
+ if (color.G != byte.MaxValue)
|
|
|
+ this[1] = this[1].Or(image.Mul((float)color.G / byte.MaxValue));
|
|
|
+ else
|
|
|
+ this[1] = this[1].Or(image);
|
|
|
+ }
|
|
|
+ if (color.B != 0)
|
|
|
+ {
|
|
|
+ if (color.B != byte.MaxValue)
|
|
|
+ this[2] = this[2].Or(image.Mul((float)color.B / byte.MaxValue));
|
|
|
+ else
|
|
|
+ this[2] = this[2].Or(image);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|