[SOLVED] COP3504C Lab 10- Meme Generator

35.00 $

Programming resource
Digital learning resource
Category:
✓ Practical programming resource
✓ Suitable for guided study and reference
✓ Tutor guidance available when needed

Description

5/5 - (2 votes)

Lab 10: Meme Generator

Overview
In this lab, students will use an external library to create a meme generator library and executable. The purposes of this assignment is to give students practice with setting up, importing, using, and writing libraries in C++.

SFML Setup
In this assignment, students will import and use SFML (Simple and Fast Multimedia Library). This section describes how to install SFML and integrate it into a project.
Installation
1. Download GCC 7.3.0 MinGW (SEH) – 64-bit; decompress into reasonable path (e.g., C:\Libraries).
2. Add path (e.g., C:\Libraries\SFML-2.5.1) as variable SFML_INSTALL to system variables.
3. Add binary path (e.g., C:\Libraries\SFML-2.5.1\bin) to PATH system variable.

Integration
Under the compiler settings, add the following lines to your CMakeLists.txt to integrate SFML into the project:
set(SFML_DIR “C:/Libraries/SFML-2.5.1/lib/cmake/SFML”) find_package(SFML 2.5 COMPONENTS graphics audio REQUIRED)

You can add the library to your memer library target by specifying link instructions:
add_library(memer memer.cpp) target_link_libraries(memer sfml-graphics sfml-audio)

Likewise, you can link your memer library to your memeify executable:
add_executable (memeify memeify.cpp) target_link_libraries(memeify memer sfml-graphics sfml-audio)

Use
To use SFML, you simply include the appropriate header in your code and use SFML constructs in your project:
#include <SFML/Graphics.hpp>

The Cave-Story.ttf open-source font file has also been provided for this project.

Classes
There are a few important classes that you will want to read about in the SFML documentation.

sf::Image
This object is an image in system memory (RAM), stored as a series of pixels.

sf::Texture
This object represents a read-only version of image data pre-formatted and stored in video memory (VRAM).

sf::Font
A font for use in SFML routines. Typically loaded from a file.

sf::String
The SFML native String format.
sf::Sprite
A drawable class; it references a section of a texture that is used for display / drawing.

sf::Text
A drawable text element; incorporates a Font and a String. Positioning can be set as needed.

sf::RenderTexture
A read-write texture; data is stored in video memory. This object can be drawn on.

Specification
In this assignment, students will generate two artifacts, a memer library and a memeify executable.

Library
The library will be named memer. It should incorporate the function below and include memer.h:
sf::Image generateMeme(sf::Image base, sf::String topText, sf::String bottomText = “”, int topX = -1, int topY = -1, int bottomX = -1, int bottomY = -1)

Takes in an base to be used as the base image. Returns a new sf::Image with topText drawn over it at location (topX, topY) in the provided font. If no coordinates are provided, topText should be centered horizontally and be 1/3 from the top of the image. If it is provided, bottomText is drawn at location (bottomX, bottomY). If provided, the tbottomText should be placed 1/3 from the bottom of the image.

In general, adding text to an image will consist of the following steps:
1. Converting the Image into a Texture
2. Wrapping the Texture in a Sprite
3. Drawing the Sprite on a fresh & empty RenderTexture
4. Loading a Font, and using it to construct a Text element
5. Drawing the Text on the RenderTexture
6. Extracting an Image from a Texture, derived from the RenderTexture.

NOTE: graphics are traditionally done differently in 2D and 3D, resulting in the Image from a Texture being upside down; make sure to flip it horizontally before returning it!

Executable
Executable should function with just file & top text: … but should also accept a partial / full complement:

finn@BMO:~$ ./memeify doge.jpg “Such memes”

finn@BMO:~$ ./memeify doge.jpg “Such memes”\ > “wow” 360 90 120 360

The executable should 1) display the image in a window until the window is closed, and 2) save the image with a new name based on the old one in the form of STEM-meme.EXT; e.g., if the original image was “doge.jpg”, the new image saved should be “doge-meme.jpg”.

Submissions
NOTE: Your output must match the example output *exactly*. If it does not, you will not receive full credit for your submission! (Note that matching sample output is necessary, but not sufficient, for full credit.)

Files: memeify.zip
Method: Submit on Canvas

Compressed Archive (memeify.zip)
We do not list required source files, only headers. You should include additional source or header files in addition to those listed – based on your design – but you must have the listed files at a minimum.

Your compressed file should have the following directory/file structure:

memeify.zip memeify (directory)
CMakeLists.txt memer.h
(Other sources / folders)

Resource details

Understand the Task Before You Use the Resource

Review the requirements, identify the programming concepts involved, study the implementation and test your understanding with your own examples and modifications.