28 #include "../../include/effects/Pixelate.h"
35 init_effect_details();
40 pixelization(pixelization), left(left), top(top), right(right), bottom(bottom)
43 init_effect_details();
47 void Pixelate::init_effect_details()
55 info.
description =
"Pixelate (increase or decrease) the number of visible pixels.";
65 std::shared_ptr<QImage> frame_image = frame->GetImage();
74 if (pixelization_value > 0.0) {
76 std::shared_ptr<QImage> smaller_frame_image = std::shared_ptr<QImage>(
new QImage(frame_image->scaledToWidth(max(frame_image->width() * pixelization_value, 2.0), Qt::SmoothTransformation)));
79 std::shared_ptr<QImage> pixelated_image = std::shared_ptr<QImage>(
new QImage(smaller_frame_image->scaledToWidth(frame_image->width(), Qt::FastTransformation).convertToFormat(QImage::Format_RGBA8888)));
82 unsigned char *pixels = (
unsigned char *) frame_image->bits();
83 unsigned char *pixelated_pixels = (
unsigned char *) pixelated_image->bits();
86 int top_bar_height = top_value * frame_image->height();
87 int bottom_bar_height = bottom_value * frame_image->height();
88 int left_bar_width = left_value * frame_image->width();
89 int right_bar_width = right_value * frame_image->width();
92 for (
int row = 0; row < frame_image->height(); row++) {
95 if ((row >= top_bar_height) && (row <= frame_image->height() - bottom_bar_height)) {
96 memcpy(&pixels[(row * frame_image->width() + left_bar_width) * 4], &pixelated_pixels[(row * frame_image->width() + left_bar_width) * 4],
sizeof(
char) * (frame_image->width() - left_bar_width - right_bar_width) * 4);
101 smaller_frame_image.reset();
102 pixelated_image.reset();
138 bool success = reader.parse( value, root );
141 throw InvalidJSON(
"JSON could not be parsed (or is invalid)",
"");
151 throw InvalidJSON(
"JSON is invalid (missing keys or invalid data types)",
"");
162 if (!root[
"pixelization"].isNull())
164 if (!root[
"left"].isNull())
166 if (!root[
"top"].isNull())
168 if (!root[
"right"].isNull())
170 if (!root[
"bottom"].isNull())
179 root[
"id"] =
add_property_json(
"ID", 0.0,
"string",
Id(), NULL, -1, -1,
true, requested_frame);
180 root[
"position"] =
add_property_json(
"Position",
Position(),
"float",
"", NULL, 0, 1000 * 60 * 30,
false, requested_frame);
182 root[
"start"] =
add_property_json(
"Start",
Start(),
"float",
"", NULL, 0, 1000 * 60 * 30,
false, requested_frame);
183 root[
"end"] =
add_property_json(
"End",
End(),
"float",
"", NULL, 0, 1000 * 60 * 30,
false, requested_frame);
184 root[
"duration"] =
add_property_json(
"Duration",
Duration(),
"float",
"", NULL, 0, 1000 * 60 * 30,
true, requested_frame);
194 return root.toStyledString();