28 #include "../../include/effects/Bars.h"
33 Bars::Bars() : color(
"#000000"), left(0.0), top(0.1), right(0.0), bottom(0.1) {
35 init_effect_details();
40 color(color), left(left), top(top), right(right), bottom(bottom)
43 init_effect_details();
47 void Bars::init_effect_details()
62 std::shared_ptr<Frame>
Bars::GetFrame(std::shared_ptr<Frame> frame, int64_t frame_number)
65 std::shared_ptr<QImage> frame_image = frame->GetImage();
68 std::shared_ptr<QImage> tempColor = std::shared_ptr<QImage>(
new QImage(frame_image->width(), 1, QImage::Format_RGBA8888));
69 tempColor->fill(QColor(QString::fromStdString(
color.
GetColorHex(frame_number))));
78 unsigned char *pixels = (
unsigned char *) frame_image->bits();
79 unsigned char *color_pixels = (
unsigned char *) tempColor->bits();
82 int top_bar_height = top_value * frame_image->height();
83 int bottom_bar_height = bottom_value * frame_image->height();
84 int left_bar_width = left_value * frame_image->width();
85 int right_bar_width = right_value * frame_image->width();
88 for (
int row = 0; row < frame_image->height(); row++) {
91 if ((top_bar_height > 0.0 && row <= top_bar_height) || (bottom_bar_height > 0.0 && row >= frame_image->height() - bottom_bar_height)) {
92 memcpy(&pixels[row * frame_image->width() * 4], color_pixels,
sizeof(char) * frame_image->width() * 4);
95 if (left_bar_width > 0.0) {
96 memcpy(&pixels[row * frame_image->width() * 4], color_pixels,
sizeof(char) * left_bar_width * 4);
100 if (right_bar_width > 0.0) {
101 memcpy(&pixels[((row * frame_image->width()) + (frame_image->width() - right_bar_width)) * 4], color_pixels,
sizeof(char) * right_bar_width * 4);
142 bool success = reader.parse( value, root );
145 throw InvalidJSON(
"JSON could not be parsed (or is invalid)",
"");
155 throw InvalidJSON(
"JSON is invalid (missing keys or invalid data types)",
"");
166 if (!root[
"color"].isNull())
168 if (!root[
"left"].isNull())
170 if (!root[
"top"].isNull())
172 if (!root[
"right"].isNull())
174 if (!root[
"bottom"].isNull())
183 root[
"id"] =
add_property_json(
"ID", 0.0,
"string",
Id(), NULL, -1, -1,
true, requested_frame);
184 root[
"position"] =
add_property_json(
"Position",
Position(),
"float",
"", NULL, 0, 1000 * 60 * 30,
false, requested_frame);
186 root[
"start"] =
add_property_json(
"Start",
Start(),
"float",
"", NULL, 0, 1000 * 60 * 30,
false, requested_frame);
187 root[
"end"] =
add_property_json(
"End",
End(),
"float",
"", NULL, 0, 1000 * 60 * 30,
false, requested_frame);
188 root[
"duration"] =
add_property_json(
"Duration",
Duration(),
"float",
"", NULL, 0, 1000 * 60 * 30,
true, requested_frame);
191 root[
"color"] =
add_property_json(
"Bar Color", 0.0,
"color",
"", NULL, 0, 255,
false, requested_frame);
201 return root.toStyledString();