12 #include <QCoreApplication>
29 for (
unsigned int i = 255; i > 0; i--)
56 int bufsize = (
m_size.height() + 2) * (
m_size.width() + 2);
58 m_rgbBuf =
new unsigned char[bufsize];
82 uchar *iptr = ptr + bpl + 1;
87 uint sum = (iptr[-bpl] + iptr[-1] + iptr[1] + iptr[bpl]) >> 2;
98 uint red = color / 0x10000;
99 uint green = (color % 0x10000) / 0x100;
100 uint blue = color % 0x100;
102 for (
uint i = 255; i > 0; i--)
104 uint r = (
unsigned int)(((100 *
static_cast<double>(red) / 255)
106 r = std::min<uint>(r, 255);
107 uint g = (
unsigned int)(((100 *
static_cast<double>(green) / 255)
109 g = std::min<uint>(g, 255);
110 uint b = (
unsigned int)(((100 *
static_cast<double>(blue) / 255)
112 b = std::min<uint>(b, 255);
114 m_image->setColor(i, qRgba(r, g, b, 255));
129 double i = ((double)x / ((
double)
m_phongRad)) - 1;
130 double i2 = ((double)y / ((
double)
m_phongRad)) - 1;
133 i = 1 - pow(i*i2,.75) - i*i - i2*i2;
144 i = std::min<double>(i, 255);
145 auto uci = (
unsigned char)i;
150 m_phongDat[(PHONGRES-1)-y][(PHONGRES-1)-x] = uci;
157 m_phongDat[(PHONGRES-1)-y][(PHONGRES-1)-x] = 0;
163 #define M_PI_F static_cast<float>(M_PI)
170 int wd2 = (int)(
WIDTH / 2);
171 int hd2 = (int)(
HEIGHT / 2);
175 *angle = (int)(asinf((
float)(y-(
HEIGHT/2.0F))/(float)*yo)/(
M_PI_F/180.0F));
176 *xo = (int)((x-(
WIDTH/2.0F))/cosf(*angle*(
M_PI/180.0)));
178 if (*xo >= -wd2 && *xo <= wd2) {
185 *angle = (int)(asinf((
float)(y-(
HEIGHT/2.0F))/(float)*yo)/(
M_PI_F/180.0F));
186 *xo = (int)((x-(
WIDTH/2.0F))/cosf(*angle*(
M_PI/180.0)));
188 if (*xo >= -wd2 && *xo <= wd2) {
196 *angle = (int)(acosf((
float)(x-(
WIDTH/2.0F))/(float)*xo)/(
M_PI_F/180.0F));
197 *yo = (int)((y-(
HEIGHT/2.0F))/sinf(*angle*(
M_PI/180.0)));
199 if (*yo >= -hd2 && *yo <= hd2) {
206 *angle = (int)(acosf((
float)(x-(
WIDTH/2.0F))/(float)*xo)/(
M_PI_F/180.0F));
207 *yo = (int)((y-(
HEIGHT/2.0F))/sinf(*angle*(
M_PI/180.0)));
219 uchar *
p = buffer + ((y1 + 1) *
m_bpl) + x + 1;
220 for (
int y = y1; y <= y2; y++)
228 uchar *
p = buffer + ((y2 + 1) *
m_bpl) + x + 1;
229 for (
int y = y2; y <= y1; y++)
237 buffer[((y1 + 1) *
m_bpl) + x + 1] = 0xff;
247 int prev_y =
m_bpl + 1;
249 unsigned char *outputbuf =
m_image->bits();
251 for (dy = (-ly) + (PHONGRES / 2), j = 0; j <
m_height; j++, dy++,
256 for (dx = (-lx) + (PHONGRES / 2), i = 0; i <
m_width; i++, dx++,
262 if (yp < 0 || yp >= (
int)PHONGRES ||
263 xp < 0 || xp >= (int)PHONGRES)
265 outputbuf[out_y] = 0;
276 double r = (double)(color>>16) / 255.0;
277 double g = (double)((color>>8)&0xff) / 255.0;
278 double b = (double)(color&0xff) / 255.0;
281 max = std::max(g, max);
282 max = std::max(b, max);
285 min = std::min(g, min);
286 min = std::min(b, min);
290 if (max != 0.0) *s = (max - min) / max;
293 if (*s == 0.0) *h = 0.0;
296 double delta = max - min;
298 if (r == max) *h = (g - b) / delta;
299 else if (g == max) *h = 2.0 + (b - r) / delta;
300 else if (b == max) *h = 4.0 + (r - g) / delta;
304 if (*h < 0.0) *h = *h + 360;
310 double r = __builtin_nan(
"");
311 double g = __builtin_nan(
"");
312 double b = __builtin_nan(
"");
323 if (h == 360.0) h = 0.0;
327 double w = v * (1.0 - s);
328 double q = v * (1.0 - (s * f));
329 double t = v * (1.0 - (s * (1.0 - f)));
333 case 0: r = v; g =
t; b = w;
break;
334 case 1: r = q; g = v; b = w;
break;
335 case 2: r = w; g = v; b =
t;
break;
336 case 3: r = w; g = q; b = v;
break;
337 case 4: r =
t; g = w; b = v;
break;
339 default: r = v; g = w; b = q;
break;
343 *color = ((
unsigned int)(r*255)<<16) | ((
unsigned int)(g*255)<<8) | ((
unsigned int)(b*255));
358 prev_y = std::max(prev_y, 0);
363 int y = (i * numSamps) / (
m_width - 1);
384 LOG(VB_GENERAL, LOG_ERR,
"BumpScope::draw: Bad image");
487 if (m_is <= 0 || m_is >= 0.5)
524 const QString &
name(
void)
const override
526 static QString s_name = QCoreApplication::translate(
"Visualizers",
538 [[maybe_unused]]
const QString &pluginName)
const override