inspect-opencv: Make the display similar to the SDL version
* fix color conversion bugs * use smaller text and thinner lines
This commit is contained in:
parent
891550cd82
commit
9cee399e37
1 changed files with 43 additions and 9 deletions
|
@ -27,21 +27,43 @@ using namespace cv;
|
||||||
#include "dbgutil.h"
|
#include "dbgutil.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Macros to conver a color from the SDL_gfxprimitive style format.
|
* Macros to convert a color from the SDL/SDL_gfxprimitive style format.
|
||||||
* bpp=4, little-endian.
|
*
|
||||||
|
* Note: we don't use alpha values and thus ignore them.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The format used for a frame with bpp=4, little-endian.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define RAW_R(c) ((c) & 0xff)
|
||||||
|
#define RAW_G(c) ((c >> 8) & 0xff)
|
||||||
|
#define RAW_B(c) ((c >> 16) & 0xff)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SDL_gfx color is 0xRRGGBBAA
|
||||||
|
* https://www.ferzkopp.net/Software/SDL_gfx-2.0/Docs/html/index.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define R(c) ((c >> 24) & 0xff)
|
||||||
|
#define G(c) ((c >> 16) & 0xff)
|
||||||
|
#define B(c) ((c >> 8) & 0xff)
|
||||||
|
#define A(c) (c & 0xff)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OpenCV color is BGR.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define R(c) ((c) & 0xff)
|
|
||||||
#define G(c) ((c >> 8) & 0xff)
|
|
||||||
#define B(c) ((c >> 16) & 0xff)
|
|
||||||
#define COLOR(c) Scalar(B(c), G(c), R(c))
|
#define COLOR(c) Scalar(B(c), G(c), R(c))
|
||||||
|
|
||||||
|
static double scale = 1.0;
|
||||||
|
|
||||||
static void stringColor(Mat &screen, int x, int y, const char *text,
|
static void stringColor(Mat &screen, int x, int y, const char *text,
|
||||||
uint32_t color)
|
uint32_t color)
|
||||||
{
|
{
|
||||||
static const int font = FONT_HERSHEY_PLAIN;
|
static const int font = FONT_HERSHEY_PLAIN;
|
||||||
static const int thickness = 4;
|
static const int thickness = scale;
|
||||||
static const double font_scale = 4.0;
|
static const double font_scale = scale;
|
||||||
|
|
||||||
putText(screen, text, Point(x, y), font, font_scale, COLOR(color),
|
putText(screen, text, Point(x, y), font, font_scale, COLOR(color),
|
||||||
thickness);
|
thickness);
|
||||||
|
@ -59,10 +81,22 @@ static void pixelColor(Mat &screen, int x, int y, uint32_t color)
|
||||||
screen_pixel[2] = R(color);
|
screen_pixel[2] = R(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void pixelColorRaw(Mat &screen, int x, int y, uint32_t rawColor)
|
||||||
|
{
|
||||||
|
if (x < 0 || y < 0 || x >= screen.cols || y >= screen.rows) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec3b &screen_pixel = screen.at<Vec3b>(y, x);
|
||||||
|
screen_pixel[0] = RAW_B(rawColor);
|
||||||
|
screen_pixel[1] = RAW_G(rawColor);
|
||||||
|
screen_pixel[2] = RAW_R(rawColor);
|
||||||
|
}
|
||||||
|
|
||||||
static void lineColor(Mat &screen, int x1, int y1, int x2, int y2,
|
static void lineColor(Mat &screen, int x1, int y1, int x2, int y2,
|
||||||
uint32_t color)
|
uint32_t color)
|
||||||
{
|
{
|
||||||
line(screen, Point(x1, y1), Point(x2, y2), COLOR(color), 8);
|
line(screen, Point(x1, y1), Point(x2, y2), COLOR(color), scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dump_info(struct quirc *q)
|
static void dump_info(struct quirc *q)
|
||||||
|
@ -125,7 +159,7 @@ static void draw_frame(Mat &screen, struct quirc *q)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pixelColor(screen, x, y, color);
|
pixelColorRaw(screen, x, y, color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue