+draw_frame create_color_frame(void* tag, const spl::shared_ptr<frame_factory>& frame_factory, const std::vector<uint32_t>& values)
+{
+ core::pixel_format_desc desc(pixel_format::bgra);
+ desc.planes.push_back(core::pixel_format_desc::plane(static_cast<int>(values.size()), 1, 4));
+ auto frame = frame_factory->create_frame(tag, desc, core::audio_channel_layout::invalid());
+
+ for (int i = 0; i < values.size(); ++i)
+ *reinterpret_cast<uint32_t*>(frame.image_data(0).begin() + (i * 4)) = values.at(i);
+
+ return core::draw_frame(std::move(frame));
+}
+
+draw_frame create_color_frame(void* tag, const spl::shared_ptr<frame_factory>& frame_factory, uint32_t value)
+{
+ std::vector<uint32_t> values = { value };
+
+ return create_color_frame(tag, frame_factory, values);
+}
+
+draw_frame create_color_frame(void* tag, const spl::shared_ptr<frame_factory>& frame_factory, const std::vector<std::wstring>& strs)
+{
+ std::vector<uint32_t> values(strs.size());
+
+ for (int i = 0; i < values.size(); ++i)
+ {
+ if (!try_get_color(strs.at(i), values.at(i)))
+ CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Invalid color: " + strs.at(i)));
+ }
+
+ return create_color_frame(tag, frame_factory, values);
+}
+